我在 OSX 中有一个带有绘图例程的自定义控件。该控件的每个实例都使用相同的图像。
我想知道将这些图像实例化为可用于该类创建的所有实例的静态对象是否是一个好主意。
如果这是一个好主意,我如何以切刀的方式实现图像加载器? 我想在我的类(class)中添加类似的内容
static NSImage *imageone;
static NSImage *imagetwo;
static NSImage *imagethree;
但我不确定初始化图像的更好方法......也许像这样的单例函数?
+ (void)setupSharedImages {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
imageone = [NSimage imageNamed:@"...."];
imagetwo = [NSimage imageNamed:@"...."];
image three = [NSimage imageNamed:@"...."];
});
}
最佳答案
您可以在+ (void)initialize
方法中设置图像。该方法在类加载时调用一次,并且还处理同步。
作为一种选择,您可能会考虑将图像封装到“存储”单例类中。
@interface ImageStorage : NSObject
+ (ImageStorage *)sharedStorage;
- (NSImage *)imageForKey:(NSString *)key;
@end
@implementation ImageStorage {
NSDictionary *_images;
}
+ (ImageStorage *)sharedStorage
{
static dispatch_once_t onceToken;
static ImageStorage *sharedStorage;
dispatch_once(&onceToken, ^{
sharedStorage = [[ImageStorage alloc] init];
_images = [[NSDictionary dictionaryWithObjectsAndKeys:image1, key1, image2, key2, nil] retain];
});
return sharedStorage;
}
- (NSImage *)imageForKey:(NSString *)key
{
return [_images objectForKey:key];
}
@end
关于objective-c - 将 NSImage 初始化为静态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14375784/