我有一个类方法loadImage:(NSString *)path
来从路径加载图像,如果路径为nil,则加载默认路径图像。
+(NSImage *) loadImage:(NSString *)path{
if(path== nil){
path = [[NSBundle mainBundle] pathForResource:@"default" ofType:@"png"];
}
}
因为默认路径总是使用相同的路径,所以如果我运行方法1000次,我想只计算一次路径,比如
if(defaultPath == nil){
defaultPath = [[NSBundle mainBundle] pathForResource:@"default" ofType:@"png"];
}
path = defaultPath;
,我想我可以使用静态变量,但我不知道怎么做,请帮助我,我很高兴知道有关提高性能的任何建议。
答案 0 :(得分:3)
只需使用静态变量来保存默认路径:
static NSString *defaultPath = …;
if (path == nil) {
path = defaultPath;
}
但如果你出于性能原因这样做,首先要确保它是值得的。最有可能的是,这是一个不值得麻烦的过早优化。
答案 1 :(得分:1)
有一种基于GCD的有用模式可以很好地处理这种情况:
+(NSImage *) loadImage:(NSString *)path{
static NSString *storedPath;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
storedPath = [[NSBundle mainBundle] pathForResource:@"default" ofType:@"png"];
});
// Do whatever you need to do with the default resource path.
}
dispatch_once
完全符合您的要求 - 它确保初始化代码只运行一次。它也是线程安全的。
Xcode的代码完成甚至可以帮助您使用该模式 - 如果您开始输入dispatch_once
,那么您将直接获得onceToken
模板。