Objective-C语言“实例类型”返回类型
示例
Objective-C支持一种称为`instancetype的特殊类型,只能用作方法返回的类型。它评估接收对象的类。
考虑以下类层次结构:
@interface Foo : NSObject - (instancetype)initWithString:(NSString *)string; @end @interface Bar : Foo @end
当[[Fooalloc]initWithString:@"abc"]被调用时,编译器可以推断返回类型为Foo*。本Bar类源自Foo但未重写的初始化函数的声明。但是,多亏了instancetype,编译器可以推断出它[[Baralloc]initWithString:@"xyz"]返回type的值Bar*。
考虑的返回类型-[FooinitWithString:]是Foo*相反:如果你会打电话[[Baralloc]initWithString:],编译器会推断Foo*返回,而不是Bar*因为是开发者的意图。在instancetype解决了这个问题。
在引入instancetype初始化程序之前,静态方法(例如单例访问器)和想要返回接收类实例的其他方法需要返回id。问题在于这id意味着“任何类型的对象”。因此,编译器无法检测到NSString*wrong=[[Fooalloc]initWithString:@"abc"];正在分配给类型错误的变量。
由于此问题,初始化程序应始终使用instancetype而不是id作为返回值。
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下