iOS中init和initialize的特點

2021-07-05 00:11:57 字數 424 閱讀 5229

在nsobject.h中有兩個類方法:

+(void)load;

+(void)initalize;

initialize和load,我們並不需要在這兩個方法的實現中使用super呼叫父類的方法。

load不像普通方法一樣遵守繼承規則,當自己的類沒有實現load方法時,不管超類是否實現,自己都不會載入load方法,而initialize則是遵守繼承規則的。

其中load方法是在載入類的時候呼叫,但是ios在執行啟動時會載入所有的類,所以都會呼叫這個方法。然而在這個方法裡放置一些耗時操作時,就會影響使用者體驗。但是initalize方法就不一樣了,它不會在類載入時呼叫,而是在類第一次例項化之後才會呼叫。

initialize中可以實現無法再編譯期初始化的全域性變數,load的方法中可以實現swizzling的邏輯。

iOS開發init方法解析

自定義的init方法,都必須呼叫父類的init方法。一般情況下為 id init 通常情況下,這種模式可以滿足絕大多數的需求,但是在少量情況下,需要一些特殊處理。1,出於優化的考慮,init方法會釋放已經分配了記憶體的物件,然後建立另乙個新物件並返回之。2,init方法在執行過程中發生了錯誤,所以會...

Java中 clinit 和 init 區別

在除錯的過程中,經常可以看到乙個初始化函式 它是這個樣子的 剛開始沒有注意,後來發現其實 其實就是這個類的建構函式 那麼又是什麼呢?其實就這這個類的靜態 塊的集合 舉個例子吧,下面是乙個demo類。如果裡面沒有靜態 塊,就和下面一樣,只有簡單的靜態函式,那麼我們可以看一下 public class ...

IOS開發中重寫init方法使用需謹慎

經過大神指點,原來這個問題產生的原因是我錯誤的使用了重寫init方法。我重寫的方法如下,原本打算是在初始化的時候就給view乙個標題和背景色 1 自定義初始化 2 instancetype init 7return self 8 但問題恰恰出現在這個重寫的初始化方法中,具體分析如下 先在首頁中建立乙...