相同點:
- 都可以表示任何對象類型;
不同點:
- id可以用作返回值和參數(shù);instance只能用作返回值類型;
- 編譯器會監(jiān)測instance對象的真實類型。
代碼比較
id作為返回值類型
+ (id)person {
return [[self alloc] init];
}
- (id)init {
if (self = [super init]) {
NSLog(@"id");
}
return self;
}
instance 作為返回值類型
+ (instancetype)person {
return [[self alloc] init];
}
- (instancetype)init {
if (self = [super init]) {
NSLog(@"instancetype");
}
return self;
}
創(chuàng)建Person類型對象
/*
id:編譯通過,不會用警告
instance:提示警告,接收對象的指針類型不匹配
*/
NSString * person = [Person person];
總結(jié):
凡是作為返回值類型時,一律用instance,可以在編譯后,發(fā)現(xiàn)類型不匹配的對象,避免其他問題。