`

instancetype vs id

 
阅读更多

http://blog.csdn.net/numbbuaa/article/details/8556888

 

昨天刚发布了ios6.1版本,查看了一些苹果的官方api文档,看到一个instancetype关键字,几个UICollectionViewLayout的类方法,返回类型由id修改为instancetype,这两者有什么区别呢,上网搜了一下,

 

意思大概是,依照cocoa的命名规则,alloc,init这类方法,如果以id为返回类型,会返回类本身的类型,但类方法的返回类型,LLVM(clang)编译器无法判断,也就是说如果用id作为返回类型,有可能会将一个编译时错误变为一个运行时错误,instancetype则能够保证编译器正确判断返回的类型。

分享到:
评论

相关推荐

    Object-C-使用Object-C实现的堆栈stacks+队列queues.zip

    - (instancetype)init; - (void)push:(id)object; - (id)pop; - (id)peek; - (BOOL)isEmpty; @end @implementation Stack - (instancetype)init { self = [super init]; if (self) { _array = [NSMutableArray...

    iOS中id类型的理解及底层原理详解

    instancetype和id的区别在于,instancetype可以在编译的时候判断对象的真实类型,而id在编译的时候不能判断对象的真实类型。instancetype只能用于作为返回值,它会进行类型检查,如果创建出来的对象,赋值了不相干的...

    objective-c单例模式的完整书写方式

    1. **声明一个类方法**:`+ (instancetype)sharedInstance;` 这个方法返回单例对象,是全局获取单例的主要途径。 2. **私有化初始化方法**:`- (instancetype)init NS_UNAVAILABLE;` 防止其他代码直接通过`init`...

    instanceof和typeof运算符的区别详解

    在JavaScript中,`instanceof`和`typeof`是两种用于检查变量类型的运算符,它们各自具有独特的用途和特点。理解这两个运算符的区别是理解和编写高效、健壮的JavaScript代码的关键。 首先,`instanceof`运算符主要...

    ios7 Foundation框架文档

    - `+ (instancetype)arrayWithObjects:(const id [])objects count:(NSUInteger)cnt`: 使用给定的对象列表创建一个数组。 - **实例方法**: - `-(NSUInteger)count`: 返回数组中的元素个数。 - `-(id)...

    iOS NSTimer循环引用的办法

    - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { LXFWeakTarget *weakTarget = [[LXFWeakTarget alloc] initWithTarget:self]; [weakTarget addTimerWithTimeInterval...

    iOS帮助文档

    - `+ (instancetype)arrayWithObject:(id)object`: 创建并返回包含单个对象的数组。 **实例方法** - `-(NSUInteger)count`: 返回数组中的元素数量。 - `- (id)objectAtIndex:(NSUInteger)index`: 返回指定索引位置...

    iphone 开发学习基础NSSet

    1. 初始化方法:使用`+ (instancetype)setWithObject:`或`+ (instancetype)setWithObjects:(const id _Nonnull *)objects count:(NSUInteger)cnt`来创建包含单个或多个元素的集合。 2. 使用数组初始化:通过`+ ...

    Python-一个简单的脚本提供需求你就可以用它来自动化最便宜的AWSspot实例的创建

    'ImageId': 'ami-0c94855ba95c71c99', # 替换为你的AMI ID 'InstanceType': cheapest_instance_type, 'SecurityGroupIds': ['sg-0123456789abcdef0'], # 替换为你的安全组ID 'KeyName': 'your_key_pair' # 替换...

    PyPI 官网下载 | tencentcloud-sdk-python-vms-3.0.458.tar.gz

    request.InstanceType = '<instance_type>' # 实例类型 request.Zone = '<zone>' # 可用区 request.SecurityGroupIds = ['<security_group_id>'] # 安全组ID request.VpcId = '<vpc_id>' # 私有网络ID request....

    Python库 | ecs_composex-0.6.3-py2.py3-none-any.whl

    其他参数如`ImageId`、`InstanceType`和`SecurityGroupId`也需要根据实际情况填写。 总的来说,`ecs_composex`库为Python开发者提供了便捷的接口来操作阿里云ECS服务,简化了云计算资源的管理和维护,极大地提高了...

    LNInterpolation:可可和可可触摸的插值框架

    - ( instancetype )interpolateToValue:( id )toValue progress:( double )progress behavior:(LNInterpolationBehavior)behavior; Swift public func interpolate(to toValue: Any, progress: Double) -> Self ...

    探索NSObject的协议精髓:Objective-C中的基础方法解析

    - **`+ (instancetype)new`**:类方法,用于创建并返回一个新的实例。此方法通常会调用 `-init` 方法来初始化新创建的对象。 - **`- (id)copy`**:创建并返回对象的副本。通常用于实现不可变数据类型的复制。 - **`-...

    ios 数据库 (FMDB使用)

    + (instancetype)sharedInstance { static DatabaseManager *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[self alloc] init]; // 创建数据库...

    Python库 | aliyun-python-sdk-ros-2.2.6.tar.gz

    InstanceType: 'ecs.t5-lc1m1.small' SecurityGroupId: 'sg-xxx' ``` 这个模板会创建一个使用CentOS镜像的小型ECS实例,并指定安全组。 5. **最佳实践** - 使用版本控制工具(如Git)管理ROS模板,确保代码可...

    分页效果设置

    @protocol ZSegmentedControlDelegate ...@property (nonatomic, weak)id <ZSegmentedControlDelegate> delegate; //@property (nonatomic, copy) void (^indexChangeBlock)(NSUInteger index);

    ios9 单例模式区分arc与非arc宏的使用

    + (instancetype)sharedInstance { static dispatch_once_t onceToken; static id sharedInstance; dispatch_once(&onceToken, ^{ sharedInstance = [[self alloc] init]; }); return sharedInstance; } ``` ...

    ios 单例demo

    - (id)init { self = [super init]; if (self) { // 初始化操作 } return self; } // 防止其他方式实例化单例 - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; @end ``` 这里使用...

    Python库 | tencentcloud-sdk-python-ba-3.0.569.tar.gz

    req.InstanceType = "your_instance_type" req.Zone = "your_zone" # 获取响应 resp = client.CreateInstances(req) print(resp.Response) ``` 以上代码展示了如何使用`tencentcloud-sdk-python-ba`创建一个云...

    Objective-C_快速入门

    注意到初始化方法 `- (instancetype)initWithName:` 的返回值类型为 `instancetype`,这是一种特殊的泛型返回类型,表示当前类的实例类型。 #### 五、实例类型与弱类型 Objective-C 中有两种类型的实例变量: - **...

Global site tag (gtag.js) - Google Analytics