__kindof(iOS 9 新關(guān)鍵字)
例如:
- (nonull __kindof UITableViewCell)......
// xoce 5 才出instancetype
__kindof:表示相當(dāng)于當(dāng)前類或者他的子類
類的設(shè)計(jì)歷史
id:可以調(diào)用任何對象方法揽碘,不能進(jìn)行編譯檢測(運(yùn)行時(shí)容易找不到方法)
instancetype:自動識別當(dāng)前類的對象
@interface Person : NSObject
+ (isntancytype)person;
@end
@interface SubPerson : Person
@end
// 創(chuàng)建SubPerson類型的對象
SubPerson *p = [SubPerson person];// 這種情況下欠母,當(dāng)我們調(diào)用person類方法來創(chuàng)建對象的時(shí)候,會看到提示的是instancetype person亚兄,而沒有提示類信息虐拓。
// 當(dāng)我們使用下邊的情況時(shí)
@interface Person :NSObject
+ (Person *)person;
@end
// 這時(shí)候創(chuàng)建對象
SubPerson *p = [SubPerson person];// 這種情況下博敬,當(dāng)我們調(diào)用person方法的時(shí)候會提示類型信息為Person類型墓陈,但是,這時(shí)候整條語句會提示類型不匹配警告磁奖,因?yàn)樽髠?cè)為SubPerson,右側(cè)為Person某筐,所以我們使用下邊這種情況比搭。
// 如果我們使用下邊的情況
@interface Person :NSObject
+ (__kindof Person *)person;
@end
SubPerson *p = [SubPerson person];// 這時(shí)候,我們在使用上邊的方法生成對象的時(shí)候南誊,就會提示類型信息身诺,并且不會報(bào)類型不匹配警告。