初探 load和 initialize方法

2021-09-30 14:23:32 字數 886 閱讀 4086

+ (void)initialize訊息是在該類接收到其第乙個訊息之前呼叫。關於這裡的第乙個訊息需要特別說明一下,對於nsobjectruntime機制而言,其在呼叫nsobject+ (void)load訊息不被視為第乙個訊息,但是,如果像普通函式呼叫一樣直接呼叫nsobject+ (void)load訊息,則會引起+ (void)initialize的呼叫。反之,如果沒有向nsobject傳送第乙個訊息,+ (void)initialize則不會被自動呼叫。

在應用程式的生命週期中,runtime只會向每個類傳送一次+ (void)initialize訊息,如果該類是子類,且該子類中沒有實現+ (void)initialize訊息,或者子類顯示呼叫父類實現[super initialize], 那麼則會呼叫其父類的實現。也就是說,父類的+ (void)initialize可能會被呼叫多次。

如果類包含分類,且分類重寫了initialize方法,那麼則會呼叫分類的initialize實現,而原類的該方法實現不會被呼叫,這個機制同nsobject的其他方法(除+ (void)load方法) 一樣,即如果原類同該類的分類包含有相同的方法實現,那麼原類的該方法被隱藏而無法被呼叫。

父類的initialize方法先於子類的initialize方法呼叫。

load和initialize的不同

import constants.h implementation constants void initialize void load endload,是載入類的時候,這裡是constants類,就會呼叫。也就是說,ios應用啟動的時候,就會載入所有的類的 void load方法。這樣有個缺點,...

get 和load 的區別

get 方法直接返回實體類,如果查不到資料則返回null。load 會返回乙個實體 物件 當前這個物件可以自動轉化為實體物件 但當 物件被呼叫時,如果資料不存在,則會丟擲 org.hibernate.objectnotfoundexception異常 load 先到快取 session快取 二級快取...

iOS 比較load和initialize方法

ios中,類需要執行初始化操作才能正常使用。繼承於nsobject的類有兩種實現初始化類的方法 load initialize方法。void load 對於加入執行期的類或分類來說,如果該類實現了load方法,必定會呼叫此方法,且只呼叫一次。當包含類或分類的程式載入系統時,會執行該方法,一般都是程式...