50、瞭解對象的alloca和init...對象
- 一、alloc方法使用應用程序默認的虛存區。區是一個按頁對齊的內存區域,用於存放應用程序分配的對象和數據
- 二、alloc分配過程不只進行對象的內存分配,還初始化的對象的兩個小而很是重要的屬性,及它的isa實例變量和保持數
- 三、子類能夠不採用帶參數的初始化方法,而實現一個簡單的init方法 ,並在初始化後立刻使用「set」存取方法,將對象設置爲有用的初始狀態。
- 四、工廠方法則能夠避免爲可能沒有用的對象盲目分配內存。
5一、直接訪問實例變量的init...方法繼承
- 一、應始終從內初始化方法來直接訪問實例變量,由於在設置屬性時,該對象的其他部分可能還沒有徹底初始化。
- 二、父類可能沒法正確初始化的對象,並返回nil,故要常常檢查,確保self不爲零,而後再執行本身的初始化。
- 三、繼承一個類要使用多個初始化方法時,寫初始化方法,要考慮到重寫父類指定的初始化設定項來執行本身的初始化,或添加本身的附加初始化設定項。
5二、初始化方法必須以「init」字母開頭內存
- 一、若是一個對象沒有實現本身的初始化方法,Cocoa就會調用其最近的祖先對象的方法。
- 二、對於不須要初始化其餘數據的子類,重載init方法就能夠,可是常見的狀況是初始化階段須要根據外部的數據來設置對象的初始狀態。
5三、從init...方法獲得的對象多是不想要的it
- 一、init...方法獲得的對象可能不是讀者認爲的,正在被初始化的對象。
- 二、init...方法並非必定能執行其餘對象請求的初始化。
- 三、在建立對象時,一般應該在處理以前檢查返回值是否爲nil
- 四、一旦對象被初始化了,就不該該在進行初始化,不然,容易產生拋出。
5四、實現init...方法的惟一性或者指定性並不是「不可能」變量
- 一、實現init...方法的惟一性或者指定性並不是「不可能」。
- 二、調用super的初始化方法能夠卻確保繼承鏈上方的類定義的實例變量都率先獲得初始化。
- 三、在建立子類時須要關注經過繼承獲得的初始化方法。由於,有些時候,基類的init...方法已經爲類作好足夠的初始化,可是更多地多是沒有作好的,所以應該對其進行重載。
5五、init...方法有「輕重級別」之分請求
- 一、進行對象的初始化,要注意輕重之分
- 二、指定初始化方法是經過發向super的消息彼此連接在一塊兒的,而其餘的初始化方法則經過發向self的消息和其所屬類的指定初始化方法鏈接在一塊兒