@inte***ce nsobject
+ (id)alloc;
- (id)init;
@end
@inte***ce nsarray : nsobject
@end
當我們使用如下方式初始化nsarray時:
nsarray *array = [[nsarray alloc] init];
按照cocoa的命名規則,語句[nsarray alloc] 的型別就是nsarray
因為alloc的返回型別屬於關聯返回型別。同樣,[[nsarray alloc]init] 的返回結果也是nsarray。
根據cocoa的命名規則,滿足下述規則的方法:
1、類方法中,以alloc或new開頭
2、例項方法中,以autorelease,init,retain或self開頭
在ios開發中經常遇到instancetype和使用id的區別問題,比如:
- (instancetype)initwithframe:(cgrect)frame;
- (id)initwithframe:(cgrect)frame;
這個方法最直觀的區別就是返回型別不一樣,乙個是instancetype,另乙個是id
instancetype我們稱為關聯返回型別,這些方法返回以方法所在的類為型別,也就是說如果返回型別是instancetype,那麼這個方法的返回型別就是這個類的型別
instancetype的作用,就是使那些非關聯返回型別的方法返回所在類的型別!
instancetype的好處:能夠幫助編譯器更好的為我們定位**書寫的問題,有利於開發者在編譯階段發現錯誤;
id得到的返回型別就和方法宣告的返回型別一樣,是id
id和instancetype的不同點
1. instancetype可以返回和方法所在類相同的型別物件,id只能返回未知型別物件
2. instancetype只能作為返回值,不能像id那樣作為引數,比如:
instancetype作為引數(instancetype不能作為引數,這種寫法錯誤)
- (void)setlabel:(instancetype)label {}
id作為引數(id可以作為引數,這種寫法正確)
- (void)setlabel:(id)label {}
(補充)當父類的構造器想要被子類繼承的話,在父類的構造器中要使用[[self alloc]init]來建立物件,這樣才能使子類呼叫父類的構造器.
iOS中id與NSObject 和id的區別
1.我們來看看id的定義,它就是乙個指標,它可以指向的型別不僅限於nsobject 1typedefstructobjc class class 2typedefstructobjc object id 2.nsobject 就是 nsobject型別的指標了,它範圍較小。3.id是指標,它要求它指...
OC中instanceType和id的區別
今天在學習oc的過程中遇到關於instancetype和id的問題不太明白。查了一些資料後,總結它們兩個的區別和聯絡主要有以下幾點 相同點 instancetype和id都是作為方法的返回型別而被使用。不同點 1.instancetype可以返回和方法所在類相同型別的物件,id返回的型別只能是未知型...
Spring配置中的id和name屬性區分
在spring容器管理的bean中,必須僅且只有乙個無重複的id。一般情況下,配置乙個bean時,需要指定它的id屬性作為bean的名稱。class com.learnspring.hellworld q 如果在spring環境下,如果出現多個配置id屬性值一樣的bean 如果在配置bean的時候並...