搜索
您的当前位置:首页正文

instance和id的区别

来源:二三娱乐

相同点:

  1. 都可以表示任何对象类型;

不同点:

  1. id可以用作返回值和参数;instance只能用作返回值类型;
  2. 编译器会监测instance对象的真实类型。

代码比较
id作为返回值类型

+ (id)person {
    return [[self alloc] init];
}

- (id)init {
    if (self = [super init]) {
        NSLog(@"id");
    }
    return self;
}

instance 作为返回值类型

+ (instancetype)person {
    return [[self alloc] init];
}
- (instancetype)init {
    if (self = [super init]) {
          NSLog(@"instancetype");
    }
    return self;
}

创建Person类型对象

/*
 id:编译通过,不会用警告
 instance:提示警告,接收对象的指针类型不匹配
 */
NSString * person = [Person person];

总结:
凡是作为返回值类型时,一律用instance,可以在编译后,发现类型不匹配的对象,避免其他问题。

Top