美文网首页
07-09、instancetype和id关键字的区别

07-09、instancetype和id关键字的区别

作者: 山中石头 | 来源:发表于2017-09-21 13:07 被阅读0次

    instancetype 和 id 都是万能指针 都可以 指向一个对象

    instancetype 和 id类型的区别:

    1、id在编译的时候不能判断对象的真实类型
    instancetype在编译的时候可以判断对象的真实类型
    2、id和instancetype除了一个在编译时不知道真实类型, 一个在编译时知道真实类型以外, 还有一个区别
    id可以用来定义变量, 可以作为返回值, 可以作为形参
    instancetype只能用于作为返回值

    注意: 以后但凡自定义构造方法, 返回值尽量使用instancetype, 不要使用id

    main.m
    #import <Foundation/Foundation.h>
    #import "Person.h"
    
    int main(int argc, const char * argv[]) {
    
    //    Person *p  =[[Person alloc] init];
    //    [p setAge:99];
    // 如果init方法的返回值是instancetype, 那么将返回值赋值给一个其它的对象会报一个警告
    // 如果是在以前, init的返回值是id, 那么将init返回的对象地址赋值给其它对象是不会报警告的
    //    NSString *str = [[Person alloc] init];
    id p = [[Person alloc] init];
    //    instancetype p1 = [[Person alloc] init];
    //    NSUInteger length = [str length];
    //    NSLog(@"length = %lu", length);
    
    return 0;
    }
    
    Person.m
    #import "Person.h"
    
    @implementation Person
    // 注意: 以后但凡自定义构造方法, 返回值尽量使用instancetype, 不要使用id
    - (instancetype)init
    //- (id)init
    {
    if (self = [super init]) {
        _age = 5;
    }
    return self;
    }
    @end
    

    相关文章

      网友评论

          本文标题:07-09、instancetype和id关键字的区别

          本文链接:https://www.haomeiwen.com/subject/vdmzsxtx.html