我只是想出了一個簡單的場景,讓我自己去練習NSClassFromString
和Objective-C運行庫。最小化頭文件導入
背景:
想象我在我創建基於一些條件的類實例的類方法,讓我們說:
Class class;
id object;
if(classNumber == 1)
{
//create ClassA
class = NSClassFromString(@"classA");
object = [[class alloc] init];
}
else if(classNumber == 2)
{
//create ClassB
class = NSClassFromString(@"classB");
object = [[class alloc] init];
}
else if(classNumber == 3)
{
//create ClassC
class = NSClassFromString(@"classC");
object = [[class alloc] init];
}
else
{
object = nil;
}
return object;
對於運行時的版本,我將分別取代上述並在上述if-elseif-else
內使用:
Class class = objc_allocateClassPair([classA class], "mySubClass", 0);
...
Class class = objc_allocateClassPair([classB class], "mySubClass", 0);
...
Class class = objc_allocateClassPair([classC class], "mySubClass", 0);
...
兩個版本都很順利。但我必須#import
然而所有這些classX
。
由於這是一個類方法,只會被調用一次,我不知道是否存在一些聰明的方法來創建一個類,而無需導入所有這些標題。
我知道答案很可能是「否」,因爲編譯器需要在編譯時知道該類及其方法簽名。
但我的經驗是,每當我說「好吧,我想我在這裏推了一下。讓我們解決什麼似乎現在的工作」,有人會出現並會說「嘿反駁我滿意,看看這裏,有一個更好/更聰明的方法來做到這一點,這是可能的。「。所以我想我會問。
要總結問題:,纔有可能最大限度地減少#import
荷蘭國際集團儘可能多的,如果我們只需要創建需要要導入的文件中的一個類?還是有一些聰明的方法可以動態地導入一個頭文件?