1>instancetype在類型表示上,跟id一樣,可以表示任何對象類型
2>instancetype只能用在返回值類型上,不能像id一樣用在參數類型上
3>instancetype比id多一個好處:編譯器會檢測instancetype的真實類型
第3點的解釋: 在下面這種情況下
// Person.m文件里
+ (id)person{
return [[self alloc] init];
}
// mainViewController.m,下面這行代碼,用字符串類型的指針指向Person類的對象,編譯通過,因為person返回的id類型,任何指針都可以指向它
NSString *str = [Person person];
// 如果用instancetype,編譯時,會有警告.也就是說instancetype比id多了檢測真實類型的功能,可以提前暴露程序存在的風險
+ (instancetype)person{
return [[self alloc] init];
}
NSString *str = [Person person]; //會有警告,[Person person]返回的Person類型, 警告信息:把Person類型的數據賦值給字符串類型
// 可以這么說,作為返回值時,凡是用id的地方,都建議換成instancetype,例如下面的代碼
- (instancetype)initWithDic:(NSDictionary *) app
{
if(self == [super init]){
self.name = app[@"name"];
self.icon = app[@"icon"];
}
return self;
}
+ (instancetype)initWithDic:(NSDictionary *) app
{
return [[[self alloc]init] initWithDic:app];
{
if(self == [super init]){
self.name = app[@"name"];
self.icon = app[@"icon"];
}
return self;
}
+ (instancetype)initWithDic:(NSDictionary *) app
{
return [[[self alloc]init] initWithDic:app];
}
浙公網安備 33010602011771號