首页 > 代码库 > iOS 快速创建对象的类方法里的self
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的区别>
iOS 快速创建对象的类方法里的self
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。