+ (void)initialize
訊息是在該類接收到其第乙個訊息之前呼叫。關於這裡的第乙個訊息需要特別說明一下,對於nsobject
的runtime
機制而言,其在呼叫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方法,必定會呼叫此方法,且只呼叫一次。當包含類或分類的程式載入系統時,會執行該方法,一般都是程式...