【问题标题】:Getting and setting a static NSArray获取和设置静态 NSArray
【发布时间】:2013-08-02 12:48:25
【问题描述】:

我在数据库中有一些数据我想检索为自定义对象的NSArray,我希望这个NSArray 是静态的,因为我需要从一个方法都是类方法的类中引用它我没有实例化。我需要首先检查这个NSArray 是否已经包含对象,如果没有,从数据库中获取数据并创建它。然后,我需要能够从视图控制器中获取此NSArray,例如NSArray *listOfItems = [MyClass getStaticArray],但我不知道如何处理。

与此相关的另一个问题:这样的静态NSArray 会对内存管理产生什么影响?

谢谢!

【问题讨论】:

  • 其他几个人已经提到了单例模式;该模式的内存管理含义是,在进程退出之前,数组永远不会被释放,但(通常)只有一个数组副本,所以这通常不是静态数据的问题。

标签: ios objective-c static nsarray public


【解决方案1】:

只需使用单例。

创建类StaticArrayClass : NSArray

然后在.m文件中:

+(id)sharedInstance {
    static dispatch_once_t pred;
    static StaticArrayClass *sharedInstance = nil;
    dispatch_once(&pred, ^{
        sharedInstance = [[StaticArrayClass alloc] initWithArray:@[@1,@2.....]];
    });
    return sharedInstance;
}

- (void)dealloc {
    abort();
}

在 .h 文件中:

@interface StaticArrayClass : NSArray

+(id)sharedInstance;

就是这样。

你可以这样称呼它:

NSArray *listOfItems = [StaticArrayClass sharedInstance]

应用程序中的任何位置。如果您不知道单例设计模式,请访问@Bruno Koga 答案中的链接。

【讨论】:

    【解决方案2】:

    根据您所描述的情况,最好的解决方案是使用Singleton Pattern。 确保你理解它。 Here is a StackOverflow question 关于 iOS 上的 Singleton。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2012-11-22
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多