A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© siegee 中级黑马   /  2014-4-28 19:58  /  1201 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 siegee 于 2014-4-29 00:21 编辑

哪位大神能就下面这段代码给详细的说明说明?
-(id)init
{
    self=[super init];// 重点
    if (self) {
        
    }
    return self;
}

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

3 个回复

倒序浏览
就相当于是显示调用父类的构造函数一样
要先将父类实例化,然后才能实例化子类
你看到的代码一般是if (self = [super init]) {...}
相当于是self = [super init]; if (nil != self) {...}
如果父类实例化失败了,返回的指针为空,则无法进行当前类的初始化工作。
self相当于是CPP里面的this,super表示的是父类指针

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

回复 使用道具 举报
-(id)init
{
    self=[super init];//就是显示的调用类的方法 但在这个过和中是没有父类对象的
    if (self) {
        
    }
    return self;
}

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

回复 使用道具 举报
-(id)init
{
    self=[super init];// 任何对象都是继承NSObject的,对象的init方法其实是从父类继承来的,重写自己的init当然需要先调用父类的init,在内存中开辟存储空间
    if (self) {   //判断返回的self是否为空,避免父类的init方法造成野指针错误,不过一般不会
        
    }
    return self;
}

PS:这应该是面向对象的基本特性,可以温习下牛逼的三大特性:lol

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马