在iOS中存储“全局”对象的位置

时间:2012-07-18 16:39:53

标签: objective-c ios

  

可能重复:
  How or where should I store object instances that I require globally within my iOS app?

我有一些全局对象(几乎在所有应用程序屏幕中使用),并且大多数是在应用程序启动后立即创建的。我想从我的所有ViewControllers访问这些对象(没有别的,只有ViewControllers)。在哪里存放?

我在@property中考虑AppDelegate,但我认为(但我可能错了)这是一个丑陋的解决方案。

对象可能非常复杂,这不是一个简单的类型。

5 个答案:

答案 0 :(得分:10)

您可以将全局对象放在具有用于访问全局对象的类方法的类中,实现+(void)load以准备这些对象,并将它们存储在静态变量中,从而使全局对象可访问。

部首:

@interface GlobalObjects
+(void)load;
+(MyObject1*)myObject1;
@end

实现:

#import "GlobalObjects.h"
static MyObject1* _myObject1 = nil;
@implementation GlobalObjects
+(void)load {
    _myObject1 = [[MyObject1 alloc] init];
}
+(MyObject1*)myObject1 {
    return myObject1;
}
@end

用法:

MyObject1 *shared = [GlobalObjects myObject1];

您也可以在其方法中使变量为静态初始化。

答案 1 :(得分:3)

是的,我使用App Delegate的属性,然后通过强制转换sharedApplication委托属性来访问它们。

__weak AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

希望这有帮助,

乔纳森

答案 2 :(得分:1)

AppDelegate中的@property是一个很好的解决方案。你也可以使用单身人士。

答案 3 :(得分:1)

如果您只有一堆对象,那么您的app委托就可以了。

否则,您可能会构建一种包含所有全局数据的“模型对象”。

或者,如果它们具有任何结构,您可以将它们与Core Data一起存储。

但是,正如我所说,如果你只有几个对象,那么应用代表就可以了。

答案 4 :(得分:1)

如果它仅在视图控制器中使用,您可以考虑将其存储在实际需要访问共享对象的最高级视图控制器中(在创建/推送新控制器时,设置该引用计数属性)。

通过这种方式,您可能会想到主视图控制器使用其内容/模型填充详细视图控制器。

这实际上已经远离了全球化的资格(和负担)。