我希望能够通过应用程序中的任何地方引用某些状态/对象.例如,一个用户登录到他们的应用程序,我需要调用一个web服务并检索用户信息.然后,我希望能够通过以下方式从应用程序中的任何位置访问这些信息:

myAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
user = delegate.u;

在应用程序委托中将实例变量设置为用户对象,并在需要时从那里引用它,这是一种糟糕的做法吗?我通常在用户登录时将其设置在那里.

想听听专业人士是怎么处理这件事的.

推荐答案

通常情况下,只有在以下情况下,才应将内容连接到应用程序代理:

  • 从与应用程序委托相同的NIB文件创建(即单窗口界面中的静态UI元素)
  • 与通过应用程序委托的应用程序级事件处理相关(如"首选项"窗口的菜单项)

对于其他所有内容,您应该创建一个单例来管理对它们的访问.

Jason Coco建议通过应用程序控制器进行路由.在我的项目中,我通常避免这样做,因为我认为这会让高层承担太多的责任——我认为事情应该尽可能self 管理,只有在需要同级模块之间进行协调时,才应该使用更高级别的管理.

我不会链接我自己的博客,但如果你用谷歌搜索我和单身汉,你可能会找到我写的一篇更详细的帖子.

Objective-c相关问答推荐

Apple Silicon 上的 dispatch_time 计算失败

在 MacOS 上截屏

核心数据独特属性

为什么在目标 c 的静态上下文中允许 self

使用 arc4random() 时如何 Select 值的范围

不区分大小写的核心数据 CONTAINS 或 BEGINS WITH 约束

UITableView 滚动事件

iOS 内存分配 - 一个应用程序可以使用多少内存?

如何在 XCode 中复制文件?

对块进行类型定义是如何工作的

iOS:如何将 UIViewAnimationCurve 转换为 UIViewAnimationOptions?

无法在 Interface Builder (Xcode 5) 中创建与子视图的出口连接

Objective-C 中的 alloc、init 和 new

iOS 上 64 位的 BOOL

iPhone 上 SQLite 的最佳 Cocoa/Objective-C 包装器库

在 switch 语句中使用 NSString

UICollectionView 自动调整高度

获取最顶层的 UIViewController

AVAudioPlayer 不播放任何声音

Foo 类在 MyApp 和 MyAppTestCase 中都实现了.将使用两者之一.哪个是未定义的