0

我有一个loadImage:(NSString *)path从路径加载图像的类方法,如果路径为零,则加载默认路径图像。

 +(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;

,我想我可以使用静态变量,但我不知道该怎么做,请帮助我,我很高兴知道有关提高性能的任何建议。

4

2 回答 2

3

只需使用静态变量来保存默认路径:

static NSString *defaultPath = …;
if (path == nil) {
   path = defaultPath;
}

但是,如果您出于性能原因这样做,请首先确保它是值得的。很可能这是一个不值得麻烦的过早优化。

于 2012-09-02T07:29:43.790 回答
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直接获得模板。

于 2012-09-02T10:07:57.423 回答