iOS 快速创建对象的类方法里的self

快速创建对象的类方法的进化历程:

原始版本:

+ (Book *)book {

    return [ [ [Book alloc ] init ] autorelease ];

}
进化一版本:

+ (id)book {

    return [ [ [self alloc ] init ] autorelease ];

}
进化二版本:

+ (instancetype)book {

    return [ [ [self alloc ] init ] autorelease ];

}
 
进化一版本比原始版本优的地方,就在于子类调父类的方法时,返回的是子类自身,而不是父类
原始版本的情况下:
  有Dic.h这个类,继承自Book类,并且这个类有-(void)findWord;的方法
  Dic *xinhuaDic = [Dic book];   //  执行这个方法时,会先在Dic类里找book方法,没找到才去父类里找
  [xinhuaDic findWord]; // 执行到这行程序就崩溃了,报"经典错误"
所以用 self和id固定类型 好. self的特点就是,谁调用这个方法,self就代表谁
 
进化二版本比进化一版本优的地方见另一篇随笔<instancetype和id的区别>

转载于:https://www.cnblogs.com/oumygade/p/4271304.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值