NSObject instancetype id
来源:互联网 发布:阿里云ssl证书 编辑:程序博客网 时间:2024/05/06 09:05
1. id 与 NSObject *
(1) id 是 Objective-C 对象,但是并不一定是NSObject对象,并非所有的Foundation/Cocoa对象都是继承于NSObject对象的,比如NSProxy。同时,id与NSObject对象之间有很多的共同方法,比如retain与release等方法。更一步来说:所有的对象本质来说都是 id 类型的。
(2) 对于id来说,你可以调用任意可见的selector,编译器和IDE不会进行类型检查,这个时候就需要你自己进行类型检查并且进行类型转换,来确保这些调用不会出错。而对于NSObject *类型,只能调用NSObject对象所声明的selector,不能调用它子类的selector,编译器会进行检查。
(3) 对于一些不想或者不能进行类型检查的地方,可以使用id。比如在集合(array, collection)类型中,比如在一些你并不知道方法的返回类型的地方(比如alloc),比如我们经常声明delegate为id类型,在运行的时候再使用respondToSelector:来进行检查。
2. id<NSObject>
使用id<NSObject>来声明一个对象,相当于告诉编译我们并不知道这个对象的类型,但是它实现NSObject protocol。一个这种类型的指针,即可以用来指向NSObject*对象,也可以用来指向NSProxy*对象,因为NSObject对象与NSProxy对象都是现了NSObject protocol。
3. id 与 instancetype
@interface NSArray+ (id)createArray;@end
[NSArray createArray] //返回类型就和方法声明的返回类型一样,是id。
@interface NSArray+ (instancetype)createArray;@end[NSArray createArray] //返回类型和方法所在类的类型相同,是NSArray*。
1、相同点
都可以作为方法的返回类型
2、不同点
①instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;
②instancetype只能作为返回值,不能像id那样作为参数。
0 0
- NSObject instancetype id
- id、NSObject *、id<NSObject>、instancetype的区别
- instancetype、id、NSObject的区别
- id和instancetype和NSObject
- instancetype、id、NSObject的区别
- instancetype、id、NSObject的区别
- OC中 instancetype、id、NSObject的区别
- id & instancetype
- instancetype、id
- id ,NSObject, id<NSObject>区别
- id ,NSObject, id<NSObject>区别
- id ,NSObject, id<NSObject>区别
- id ,NSObject, id<NSObject>区别
- id ,NSObject, id<NSObject>区别
- id ,NSObject, id<NSObject>区别
- id ,NSObject, id<NSObject>区别
- id ,NSObject, id<NSObject>区别
- id ,NSObject, id<NSObject>区别
- hdu--1234 开门人和关门人(结构体+sort)
- Hadoop YARN工作流程
- 如何使用百度天气预报API接口
- 跳转tabbar根目录设置,tabbar点击某一菜单两次限制
- wireshark怎么抓包、wireshark抓包详细图文教程 【转】
- NSObject instancetype id
- SQLServer 分页查询
- linux下客户端ssh登录失败的解决方法
- 1066. Root of AVL Tree (25)
- iOS 新浪微博 分享微博
- INSTALL_FAILED_NO_MATCHING_ABIS
- Java中的“抽象接口”
- sql 查询插入
- 哈哈,我搬家到CSDN了