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

可能重复:
在iOS应用程序中,我应该如何或在哪里存储全局所需的对象实例?

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

我想在AppDelegate但我认为(但我可能是错的)这是一个丑陋的解决scheme。

对象可以相当复杂,这不是一个简单的types。

你可以把全局对象放在类中,通过类访问全局对象,实现+(void)load来准备这些对象,并将它们存储在静态variables中,从而使全局对象可访问。

标题:

 @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]; 

您也可以在其方法内部为variablesstatic进行延迟初始化。

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

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

希望这可以帮助,

乔纳森

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

如果你只有一堆对象,你的应用程序委托是好的。

否则,你可能会build立一个包含所有全局数据的“模型对象”。

或者,如果他们有任何结构的话,你可以将它们存储在Core Data中。

但是,正如我所说,如果你只有几个对象,应用程序委托将会很好。

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

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

这实际上正在摆脱作为全球化(和负担)的限制。