id和instancetype和NSObject
2016-01-14 22:28
274 查看
1.id是通用类型的指针,编译时不进行类型检查2.id和instancetype的相同点、不同点1)相同点都可以作为方法的返回类型2)不同点instancetype只能作为返回值;id可以做为返回值,也可以作为参数的类型instancetype可以返回和方法所在类相同类型的对象;id只能返回未知类型的对象3.NSObject和idNSObject对象会进行编译时检查(需要强制类型转换)id可以直接用,不需要强制类型转换id是动态类型,编译器不再检查类型id在objc.h中的定义:/// Represents an instance of a class.struct objc_object {Class isa OBJC_ISA_AVAILABILITY;};/// A pointer to an instance of a class.typedef struct objc_object *id;NSObject.h中,NSObject类的定义如下@interface NSObject <NSObject> {Class isa OBJC_ISA_AVAILABILITY;}+ (void)load;+ (void)initialize;- (instancetype)init;+ (instancetype)new;+ (instancetype)allocWithZone:(struct _NSZone *)zone;
...参考两个类型都含有Class isa,但NSObject同时包含了一些其它的方法,并需要实现NSObject协议。 所以NSObject*可以用id来表示。但id不能用NSObject*来表示。
相关文章推荐
- iPhone/Mac Objective-C 内存管理教程和原理剖析 [转]
- Objective-C语言——Block块
- Objective-C中的字符串格式化输出(转载)
- 极力推荐 自学视频java、php、python、android、objective-C教程
- Objective-C同时添加单击和双击手势冲突
- java.lang.ClassNotFoundException: org.objectweb.asm.util.TraceClassVisitor
- libcudart.so.7.0: cannot open shared object file: No such file or directory
- Objective-C中的BOOL/bool/Boolean/NSCFBoolean区别
- Using Swift with Cocoa and Objective-C:与 Objective-C 的 API 交互(第二部分)
- Using Swift with Cocoa and Objective-C(第一部分)
- OpenStack_Swift源代码分析——Object-auditor源代码分析(1)
- Objective-C多次push操作后快速连续返回问题
- Object-C--->Swift之(三)nil合并运算符、范围运算符
- IOS 多线程初探(二) - Operation Object
- Objective-c 实例变量的访问级别
- 老oj3444 && Pku3241 Object Clustering
- Objective-C中的Block
- 【Objective-C】iOS开发中常…
- JS 深度拷贝 Object Array
- 使用iconfont时进行拼接字符图标