3 回答
TA贡献1811条经验 获得超6个赞
当您在函数范围之外定义变量时,该变量的值实际上会写入可执行文件中。这意味着您只能使用恒定值。由于您在编译时不了解有关运行时环境的所有信息(哪些类可用,它们的结构等),因此,您必须等到运行时才能创建目标c对象,但常量字符串除外,这些常量字符串具有特定的结构并保证保持这种状态。您应该做的是将变量初始化为nil并用于+initialize创建图像。initialize是一个类方法,它将在您的类上调用任何其他方法之前被调用。
例:
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贡献1744条经验 获得超4个赞
您当然可以如下所示#define宏。编译之前,编译器将用其值替换“ IMAGE_SEGMENT”。虽然将实现为数组定义全局查找,但它与全局变量不同。宏展开后,其作用与内联代码相同,因此每次都会创建一个新图像。因此,如果在使用宏的位置上格外小心,则可以有效地创建全局变量。
#define IMAGE_SEGMENT [[NSImage alloc] initWithContentsOfFile:@"/User/asd.jpg"];
然后在需要的地方使用它,如下所示。每次执行以下代码,都会使用新的内存指针创建一个新对象。
imageSegment = IMAGE_SEGMENT
- 3 回答
- 0 关注
- 918 浏览
添加回答
举报