iOS instancetype和id的区别

区别: 

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

}

时间: 2024-12-24 21:15:57

iOS instancetype和id的区别的相关文章

iOS instancetype 跟 id 的区别

instancetype:在类型表示上,跟id一样,可以表示任何数据类型; instancetype只能用在返回值类型上,不能像id一样用在参数类型上; instancetype比id多一个好处:编译器会检测instancetype的真实类型.

instancetype和id的区别

一.什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象.我们都知道未知类型的的对象可以用id关键字表示,那为什么还会再有一个instancetype呢? 二.关联返回类型(related result types) 根据Cocoa的命名规则,满足下述规则的方法: 1.类方法中,以alloc或new开头 2.实例方法中,以autorelease,init,retain或self开头 会

【iOS入门】instancetype和id的区别

区别1: 在ARC(Auto Reference Count)环境下: instancetype用来在编译期确定实例的类型,而使用id的话,编译器不检查类型, 运行时检查类型. 在MRC(Manual Reference Count)环境下: instancetype和id一样,不做具体类型检查 区别2: id可以作为方法的参数,但instancetype不可以 instancetype只适用于初始化方法和便利构造器的返回值类型 作者:三木成森链接:https://www.jianshu.com

OC中instanceType和id的区别

今天在学习oc的过程中遇到关于instanceType和id的问题不太明白.查了一些资料后,总结它们两个的区别和联系主要有以下几点: 相同点:instanceType和id都是作为方法的返回类型而被使用. 不同点: 1.instancetype可以返回和方法所在类相同类型的对象,id返回的类型只能是未知类型的对象: 对于简易构造函数,用instancetype更好一点,因为编译器因此会知道返回的是什么类型的方法对象,而用id则不会,它只会返回未知类型的对象: 2.instancetype在错误检

Objective-C中的instancetype与id的区别

一.什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象.我们都知道未知类型的的对象可以用id关键字表示,那为什么还会再有一个instancetype呢? 二.关联返回类型(related result types) 根据Cocoa的命名规则,满足下述规则的方法: 1.类方法中,以alloc或new开头 2.实例方法中,以autorelease,init,retain或self开头 会

instancetype 和 id 的区别

原文:http://blog.csdn.net/sirodeng/article/details/50516478 一.什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象.我们都知道未知类型的的对象可以用id关键字表示,那为什么还会再有一个instancetype呢? 二.关联返回类型(related result types) 根据Cocoa的命名规则,满足下述规则的方法: 1.类

ios instancetype 和 id 的异同

1.0 相同点:都可以作为方法的返回类型 2.0 不同点: a.instancetype 可以返回和方法所在类相同类型的对象   id 只能返回未知类型的对象 b. instancetype 只能作为返回值,不能像id 那样作为参数 在实际开发中,尽量使用 instancetype (当使用继承时,父类指向子类,相当有用)

instance和id的区别

instancetype和id的区别,objective-c instancetype   clang 3.5 提供的关键字,  表示:某方法返回未知类型的OC对象 都知道id任意类型关键字,为什么还会出现一个新的关键字? 返回关联类型 1.类方法中,alloc, new开头 2.实例方法中 autorelease,init,retain,self开头 会返回方法所在类的类型的对象,即关联返回类型的方法. 这些方法的返回结果以方法所在的类为类型. for example @interface N

iOS 用instancetype代替id作返回类型有什么好处?

2014-07-07更新:苹果在iOS 8中全面使用instancetype代替id Steven Fisher:只要一个类返回自身的实例,用instancetype就有好处. @interface Foo:NSObject - (id)initWithBar:(NSInteger)bar; // initializer + (id)fooWithBar:(NSInteger)bar; // convenience constructor @end 对于简易构造函数(convenience co