为什么要重写init方法,重写有什么好处和作用:一般用来什么事情:
1.可以用来创建对象,这个是最基本的;配合alloc使用;
2.init什么时候会被执行,当对象被创建的时候;
3.好处和作用:
网友解答:可以在你实例化的时候提供更多参数以便实现对对象的快速赋值。重写init可以让你创建的对象出来就是成品。而不重写的话,还需要你对该对象的属性进行赋值。
4.解析一下self = [super init];为什么每次重写init方法都要写上这一句:
网友解答:self 为时候,系统已经生成了对象并分配了存储空间,在调用[super init]是为了初始化父类对象,在父类对象初始化过程序中有可能失败(如网络资源调用失败)或者返回其它对象(这个取决于你的父类了),这个时候的self其实也可以继续执行子类对象的初始化工作,因为都是同一个对象,只不过在你调用父类的某一些功能可能不起作用或者报错。
- 完整的创建一个可用的对象:要以下几个步骤;
- 分配存储空间 +alloc
- 初始化;-init
- 构造方法是用来初始化对象的方法,如init,
- 构造方法一定是对象方法,以-号开头;
- //实现对每个Person对象创建出来,它的_age都是10;
- 重写init方法是在implementation里面;
- 重写-init方法
@implementation Person - (id)init { self = [super init ];当前对象self if (self !=nil)//如果对象初始化成功,才有必要进行接下来的初始化 { _age = 10; } return self;//返回一个已经初始化完毕的对象; } @end
上面的代码可以写成:
- (id)init { if (self = [super init]) { _age = 10; } return self; }
xcode自动帮我们生成的,都是private
- 重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值;
- 重写构造方法的注意点;
- 先调用父类的构造方法[super init]
- 在进行子类内部成员变量的初始化;
- 任何对象在初始化自己之前,会调用父类的初始化方法;
- 因为父类里面的属性也需要初始化;所以用[super init]来初始化父类的属性,如isa指针;初始化isa指针后,isa指针就会指向当前的对象;
- if (self != nil)因为这里的self在前面已经初始化了,self是指针,self如果初始化了之后,会指向内存地址;不会是0,如果是0,则初始化失败;如果初始化成功,就对它进行赋值;
- (id) init { if(self = [super init]) { _age = 100; } return self; }
- 重写init方法,需要调用父类的init方法;
- NSObject是最基本的类,没有父类;