刘小汶

路漫漫其修远兮,吾将上下而求索。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

为什么要重写init方法,重写有什么好处和作用:一般用来什么事情:

1.可以用来创建对象,这个是最基本的;配合alloc使用;

2.init什么时候会被执行,当对象被创建的时候;

3.好处和作用:

网友解答:可以在你实例化的时候提供更多参数以便实现对对象的快速赋值。重写init可以让你创建的对象出来就是成品。而不重写的话,还需要你对该对象的属性进行赋值。

4.解析一下self = [super init];为什么每次重写init方法都要写上这一句:

网友解答:self 为时候,系统已经生成了对象并分配了存储空间,在调用[super init]是为了初始化父类对象,在父类对象初始化过程序中有可能失败(如网络资源调用失败)或者返回其它对象(这个取决于你的父类了),这个时候的self其实也可以继续执行子类对象的初始化工作,因为都是同一个对象,只不过在你调用父类的某一些功能可能不起作用或者报错。

 

 

  1. 完整的创建一个可用的对象:要以下几个步骤;
    1. 分配存储空间 +alloc
    2. 初始化;-init
  2. 构造方法是用来初始化对象的方法,如init,
  3. 构造方法一定是对象方法,以-号开头;
  4. //实现对每个Person对象创建出来,它的_age都是10;
  5. 重写init方法是在implementation里面;
  6. 重写-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

  1. 重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值;
  2. 重写构造方法的注意点;
    1. 先调用父类的构造方法[super init]
    2. 在进行子类内部成员变量的初始化;
  3. 任何对象在初始化自己之前,会调用父类的初始化方法;
  4. 因为父类里面的属性也需要初始化;所以用[super init]来初始化父类的属性,如isa指针;初始化isa指针后,isa指针就会指向当前的对象;
  5. if (self != nil)因为这里的self在前面已经初始化了,self是指针,self如果初始化了之后,会指向内存地址;不会是0,如果是0,则初始化失败;如果初始化成功,就对它进行赋值;
- (id) init
{
if(self = [super init])
{
_age = 100;
}
return self;
}

 

  1. 重写init方法,需要调用父类的init方法;
  2. NSObject是最基本的类,没有父类;
posted on 2016-04-08 21:29  williamliuwen  阅读(729)  评论(0编辑  收藏  举报