load和initialize的不同

2021-07-03 07:13:44 字數 645 閱讀 1503

#import "constants.h"

@implementation

constants

+ (void)initialize

+ (void)load

@end

load,是載入類的時候,這裡是constants類,就會呼叫。也就是說,ios應用啟動的時候,就會載入所有的類的+(void)load方法。

這樣有個缺點,當載入類需要很昂貴的資源,或者比較耗時的時候,可能造成不良的使用者體驗,或者系統的抖動。這時候,就要考慮initialize方法了。這個方法可看作類載入的延時載入方法。類載入後並不執行該方法。只有當例項化該類的例項的時候,才會在第乙個例項載入前執行該方法。

initialize 會在執行時僅被觸發一次,如果沒有向類傳送訊息的話,這個方法將不會被呼叫。這個方法的呼叫是執行緒安全的。父類會比子類先收到此訊息。

在分類中實現load方法,不會覆蓋該類的load的方法,它們都會執行,兩者可以共存。但是,在分類中實現initialize會覆蓋該類的initialize方法,兩者不可共存。如果希望在類及其categorgy中執行不同的初始化的話可以使用+(void)load;

子類中被例項化後,父類initialize方法首先被呼叫,然後呼叫子類的initialize方法。

iOS 比較load和initialize方法

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

load 和 initialize 的區別

1 只要程式啟動就會將所有類的 載入到記憶體中 在 main 函式執行之前 放到 區 無論該類有沒有被使用到都會被呼叫 2 load 方法會在當前類被載入到記憶體的時候呼叫 有且僅會呼叫一次 3 當父類和子類都實現 load 方法時,會先呼叫父類的 load 方法,再呼叫子類的 load方法4 先載...

初探 load和 initialize方法

void initialize訊息是在該類接收到其第乙個訊息之前呼叫。關於這裡的第乙個訊息需要特別說明一下,對於nsobject的runtime機制而言,其在呼叫nsobject的 void load訊息不被視為第乙個訊息,但是,如果像普通函式呼叫一樣直接呼叫nsobject的 void load訊...