码迷,mamicode.com
首页 > 移动开发 > 详细

iOS instancetype和id的区别

时间:2015-02-04 00:29:26      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:

区别: 

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];
}
 

iOS instancetype和id的区别

标签:

原文地址:http://www.cnblogs.com/oumygade/p/4271283.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!