類(lèi)
1.obj-c中沒(méi)有private的概念,可認(rèn)為全是public的
2.類(lèi)的類(lèi)型成員 Type Member
??? ? 1)實(shí)例變量 instance variable 不能被外部訪問(wèn)
??? ? 2 ) 屬性 property 編譯器會(huì)為屬性定義一個(gè)getter方法:propertyName,一個(gè)setter方法:setPropertyName,和一??? 個(gè)實(shí)例變量_propertyName,如果屬性被定義成只讀屬性,則只有g(shù)etter方法。
????? 3)除了init和dealloc方法內(nèi),使用實(shí)例變量來(lái)訪問(wèn),其他一律使用屬性來(lái)訪問(wèn),類(lèi)內(nèi)也使用self.屬性 訪問(wèn)
3.類(lèi)方法和實(shí)例方法,方法前減號(hào)為實(shí)例方法,方法前加號(hào)為類(lèi)方法。
?? 類(lèi)方法可以直接調(diào)用,不需要?jiǎng)?chuàng)建類(lèi)的實(shí)例,而實(shí)例方法只能通過(guò)類(lèi)的實(shí)例對(duì)象才能調(diào)用。
4.方法的調(diào)用,在obj-c中被稱(chēng)為消息機(jī)制,寫(xiě)在中括號(hào)內(nèi) ,eg: [class foo];
5.類(lèi)聲明以 @interface 類(lèi)名:繼承名 開(kāi)頭,以 @end 結(jié)尾,類(lèi)實(shí)現(xiàn)以@implementation 類(lèi)名 開(kāi)頭,以 @end 結(jié)尾;
6.類(lèi)的創(chuàng)建需要兩步
??? 1)alloc 請(qǐng)求內(nèi)存分配,并把所有屬性置零,指針置空
??? 2)init 初始化,可以根據(jù)參數(shù)需要自定義初始化方法,需要前置調(diào)用父類(lèi)的初始化器 [super init]
??? 3) new? == alloc + init? 無(wú)參數(shù)版本
7.對(duì)象析構(gòu)器 dealloc 在釋放對(duì)象內(nèi)存前自動(dòng)調(diào)用,無(wú)法手工調(diào)用,子類(lèi)的dealloc會(huì)調(diào)用父類(lèi)的dealloc(后置調(diào)用)
8.每個(gè)類(lèi)都有且只有1個(gè)基類(lèi),NSObject 是所有類(lèi)的根類(lèi)。
? 子類(lèi)會(huì)自動(dòng)繼承基類(lèi)的 實(shí)例變量,屬性,實(shí)例方法和類(lèi)方法
9.多態(tài) :子類(lèi)在父類(lèi)統(tǒng)一的接口下,通過(guò)重寫(xiě)方法來(lái)進(jìn)行不同的操作行為
?? self具有多態(tài)性,可以指向不同子類(lèi)
??? super沒(méi)有多態(tài)性,僅指向當(dāng)前父類(lèi)
10.盡量避免在父類(lèi)的init和dealloc中調(diào)用子類(lèi)重寫(xiě)的方法
??