instance和id的区别
来源:互联网 发布:ubuntu 语言包 编辑:程序博客网 时间:2024/05/21 09:14
instancetype clang 3.5 提供的关键字, 表示:某方法返回未知类型的OC对象
都知道id任意类型关键字,为什么还会出现一个新的关键字?
返回关联类型
1、类方法中,alloc, new开头
2、实例方法中 autorelease,init,retain,self开头
会返回方法所在类的类型的对象,即关联返回类型的方法。
这些方法的返回结果以方法所在的类为类型。
for example
@interface NSObject
+(id)alloc;
-(id)init;
@end
当我们初始化 NSArray时
NSArray*array = [[NSArray alloc] init];
[NSArray alloc]返回类型属于关联返回类型,NSArray *
instancetype
假如一个不是关联返回类型的方法
@interface NSArray
+(id)constructAnArray;
@end
当我们初始化的时候
[NSArray constructAnArray]
得到返回类型和方法声明的返回类型一样,是id
如果使用 instancetype 作为返回类型
@interface NSArray
+(instancetype)constructAnArray;
@end
同样方式初始化
[NSArray constructAnArray]
得到的返回类型和方法所在类型相同,是 NSArray *
instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型!
好处:确定对象类型帮编译器更好定位代码问题。
相同点:
作为方法的返回类型
不同点:
1、instancetype 可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象。
2、instancetype只能作为返回值,id可以作为参数.
-(void)setValue:(instancetype)value
{
}
报错!
应该写成
-(void)setValue:(id)value
{
}
- instance和id的区别
- id与instance的区别 &&动态绑定
- @+id 和 @id的区别
- +id和id的区别
- @+id/和@id的区别
- Oracle 中 instance和database的区别
- new 和 Instance区别
- Android@id和@+id的区别
- Android中@id和@+id的区别
- Android中@id和@+id的区别
- Android中@+id和@id的区别
- Android中@id和@+id的区别
- FragmentTransaction、 @+id和@id的区别
- @+id和@id 的区别 menu 布局
- id ,NSObject和id<object>的区别
- Android@id和@+id的区别
- $("#id :input")和$("#id input")的区别
- document.getelementbyid('id') 和 $('#id')的区别
- JAVA学习记录 -- String
- 扔鸡蛋问题
- java中的IO整理
- 构造函数初始化
- poj 1837 Balance
- instance和id的区别
- 浅谈三层架构
- 控制器的几种跳转方式
- android图片查看(1)
- 关于屏幕适配
- 苹果Xcode帮助文档阅读指南
- 拷贝构造函数与析构顺序
- - (void)setValue:(id)value forKey:(NSString *)key方法,实现原理与验证
- OpenCV实践之路——矩形图片的对角线分割