instance和id的區(qū)別

相同點:

  1. 都可以表示任何對象類型;

不同點:

  1. id可以用作返回值和參數(shù);instance只能用作返回值類型;
  2. 編譯器會監(jiān)測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;
}

創(chuàng)建Person類型對象

/*
 id:編譯通過,不會用警告
 instance:提示警告,接收對象的指針類型不匹配
 */
NSString * person = [Person person];

總結(jié):
凡是作為返回值類型時,一律用instance,可以在編譯后,發(fā)現(xiàn)類型不匹配的對象,避免其他問題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容