全局访问类实例 - 最佳设计方法?

时间:2013-02-16 11:48:51

标签: objective-c xcode cocoa class global-variables

好的,这是我的情况,我真的不确定使用哪种设计方法。所以,我很高兴看到我的具体案例的一些意见......

情景:

  • 我有一个基于标签的应用程序
  • 我们最初创建NSWindowController的实例(例如MyDocumentManager)来处理标签创建/操作
  • 每个标签包含(=附加到)MyDocument
  • 的实例

现在,我即将实施菜单操作。

  • 对于每个菜单,都有一个单独的菜单控制器(实际上是NSObject的子类,将所有相关功能分组),例如MyFileMenuController
  • 文件菜单的操作通过Interface Builder
  • 链接到MyFileMenuController对象中的操作

问题:

  • MyFileMenuController “如何”知道“关于MyDocumentManager(在我的AppDelegate.m中创建),以便我们可以访问当前文档详细信息并执行所有相关行动?有任何想法吗?哪种方法更可取?

我的想法:

  • 将对象从一个类传递到另一个类(听起来不那么好)
  • 单身人士(虽然我老实说从未使用过它们,但不知道是否/如何成为我的特例)
  • 通知&通知听众
  • (从另一边看,虽然不确定)代表方法

2 个答案:

答案 0 :(得分:0)

好的(不确定这是否是最佳方式),但这是我决定做的事情:

[[[NSApplication sharedApplication] delegate] MyDocumentManager]

所以,只要一个对象是我的AppDelegate的一部分,这样我就可以从任何地方访问它。

答案 1 :(得分:0)

我会将一个初始的UIViewController链接到appDelegate.rootViewController。

在这个新的视图控制器(只是称它为“mainViewController”)中,我将把我的tabBar和menuController。

据我所知,你的界面与facebook类似,带有一个leftBarbutton,它可以横向滚动并发现菜单。所以在这个leftBarButton的选择器中,我会调用类似的方法:

- (void)discoverMenuForDocument:(MyDocument*)document {
    // Set menu configuration for specific document
    // Make animation to discover menu
}

文件可能是这样的:

self.selectedViewController (<-- You cand make this in several ways depending on your code...) 

意识到(MyDocument *)不是一个对象而只是一个引用,所以在我看来这样做没有任何问题。

祝你好运!