3 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
當(dāng)您在函數(shù)范圍之外定義變量時(shí),該變量的值實(shí)際上會(huì)寫入可執(zhí)行文件中。這意味著您只能使用恒定值。由于您在編譯時(shí)不了解有關(guān)運(yùn)行時(shí)環(huán)境的所有信息(哪些類可用,它們的結(jié)構(gòu)等),因此,您必須等到運(yùn)行時(shí)才能創(chuàng)建目標(biāo)c對象,但常量字符串除外,這些常量字符串具有特定的結(jié)構(gòu)并保證保持這種狀態(tài)。您應(yīng)該做的是將變量初始化為nil并用于+initialize創(chuàng)建圖像。initialize是一個(gè)類方法,它將在您的類上調(diào)用任何其他方法之前被調(diào)用。
例:
NSImage *imageSegment = nil;
+ (void)initialize {
if(!imageSegment)
imageSegment = [[NSImage alloc] initWithContentsOfFile:@"/User/asd.jpg"];
}
- (id)init {
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
您當(dāng)然可以如下所示#define宏。編譯之前,編譯器將用其值替換“ IMAGE_SEGMENT”。雖然將實(shí)現(xiàn)為數(shù)組定義全局查找,但它與全局變量不同。宏展開后,其作用與內(nèi)聯(lián)代碼相同,因此每次都會(huì)創(chuàng)建一個(gè)新圖像。因此,如果在使用宏的位置上格外小心,則可以有效地創(chuàng)建全局變量。
#define IMAGE_SEGMENT [[NSImage alloc] initWithContentsOfFile:@"/User/asd.jpg"];
然后在需要的地方使用它,如下所示。每次執(zhí)行以下代碼,都會(huì)使用新的內(nèi)存指針創(chuàng)建一個(gè)新對象。
imageSegment = IMAGE_SEGMENT
- 3 回答
- 0 關(guān)注
- 979 瀏覽
添加回答
舉報(bào)