---恢复内容开始---
我们知道,在函数中实例化一个对象,大多数会同时进行初始化,如 Person *p =[ [Person alloc]init];
此时已经进行了初始化,使用init方法,那么我们能不能重写init方法呢,让它可以在初始化的时候直接赋值,可以从内部赋值也可以从外部赋值。我们先把代码写出来然后进行分析:
-(id)init
{
if (self = [super init]) {
self.age = 30;
}
return self;
}
在这块代码中,除去self.age = 30;该结构是构造方法的固定模式。在这里我们不得不提及 self,self可以用来调用方法,类方法和实例方法都可以用self调用,那么self是什么?我们不需要知道self是什么,因为self时刻在变,一句话,当前的方法是谁在调用,self就是谁。self类似于C++和Java中的this,大家可以参照理解。我们来实例化一个对象,P在此处的代码中,self指的是 p ,因为age是p的属性。这块代码,-(id),指的是任何类型,假设我们不知道返回值self是什么类型,我们也不必担心,因为-(id)可以指代任何类型。if(self = [super init]),括号内是对self进行初始化,括号外是if,意思是初始化成功才向后执行,失败则直接返回,系统回收已分配的资源。几乎没有初始化失败的情况,但我们为了避免失败,还是要进行判断。在随后对年龄进行赋值,年龄为30,在这个方法中,我们是从内部对年龄进行初始化,直接在.m文件中直接实现,不需要在.h文件中先声明。在主函数实例化对对象的时候,对象的年龄就是30,而不需要另外赋值。这是内部初始化,还有外部初始化。外部初始化需要在.h文件中声明,然后在.m文件中实现。我们来看具体代码:
//声明
-(id)initWithName:(NSString *)aNme andAge:(NSInteger)aAge;
//实现
-(id)initWithName:(NSString *)aNme andAge:(NSInteger)aAge{
self.name = aName;
self.age = aAge;
}
我们在主函数中进行实例化对象的时候,选择我们自定义的方法,由我们手动控制需要初始化的值从而完成初始化,这就是外部赋值。本人是初学者,大家有问题都可以进行评论我们共同解决。感谢阅读。
---恢复内容结束---
原文:https://www.cnblogs.com/li-wei203/p/9374674.html