__kindof(iOS 9 新关键字)
例如:
- (nonull __kindof UITableViewCell)......
// xoce 5 才出instancetype
__kindof:表示相当于当前类或者他的子类
类的设计历史
id:可以调用任何对象方法,不能进行编译检测(运行时容易找不到方法)
instancetype:自动识别当前类的对象
@interface Person : NSObject
+ (isntancytype)person;
@end
@interface SubPerson : Person
@end
// 创建SubPerson类型的对象
SubPerson *p = [SubPerson person];// 这种情况下,当我们调用person类方法来创建对象的时候,会看到提示的是instancetype person,而没有提示类信息。
// 当我们使用下边的情况时
@interface Person :NSObject
+ (Person *)person;
@end
// 这时候创建对象
SubPerson *p = [SubPerson person];// 这种情况下,当我们调用person方法的时候会提示类型信息为Person类型,但是,这时候整条语句会提示类型不匹配警告,因为左侧为SubPerson,右侧为Person,所以我们使用下边这种情况。
// 如果我们使用下边的情况
@interface Person :NSObject
+ (__kindof Person *)person;
@end
SubPerson *p = [SubPerson person];// 这时候,我们在使用上边的方法生成对象的时候,就会提示类型信息,并且不会报类型不匹配警告。