通过-[AppDelegate didFinishLaunchingWithOptions?]
初始化Singleton对象后,如何将此对象的指针传递给视图控制器?
它有所帮助,让我们假设该对象是独立的,但与UI合理地耦合在一起。 (例如,管理服务器连接线程。)所以我更喜欢更多的东西"亲密"而不是通过NSNotificationCenter
发送信号。
答案 0 :(得分:3)
取决于。
如果单个视图控制器需要该对象,请在viewDidLoad
中初始化它。如果整个应用程序需要它,请在应用程序委托中初始化它。
在您的情况下,它可能最适合应用程序委托,因为它在应用程序的生命周期中是必需的,而不仅仅用于一个视图控制器。
您可以在应用委托中创建属性并将对象放入其中。您可以从应用程序的任何位置获取代理,如下所示:
((AppDelegate *)[UIApplication sharedApplication].delegate)
所以,只要您从正在访问app delegate的文件中有#imported AppDelegate.h,就可以得到如下对象:
MyObject *object = ((AppDelegate *)[UIApplication sharedApplication].delegate).propertyName;
答案 1 :(得分:2)
看起来你需要单身对象!?听起来像是,你不应该关心“在哪里初始化它”。您只需创建共享实例,它将在第一次调用后立即创建:
[[myObjectWhichLivesForever instance] doSomething]
如果您需要一些UI功能,则应将其设计为灵活... f.e如果您希望在myView
MyUIViewController
中显示进度条:
[[MyObjectWhichLivesForever instance] showProgressBarInView:myView]
甚至是类方法:
[MyObjectWhichLivesForever showProgressBarInView:myView]
我相信MBProgressHud
和其他类似的事情都是这样的。
肯定:
appDelegate
传递指针(可能会很痛苦)否定:
singleton
不是最佳解决方案(但在开发中经常遇到,特别是对于iOS)