0

我将不胜感激您对如今使用以下代码访问全局变量、在 IOS 5 及更高版本中创建应用程序的看法

ProjectAppDelegate *appDelegate = (ProjectAppDelegate *)[[UIApplication sharedApplication] delegate];

以上是否被视为面向对象编程?

4

1 回答 1

4

我不会问它是否被认为是面向对象的编程。面向对象编程是关于使用具有属性和方法的交互对象的单独主题。这与您的问题无关 - 这是在 AppDelegate 中访问全局变量的使用。

我认为您真正要问的是,将全局变量放在 AppDelegate 中然后使用代码行访问程序中任何位置的变量(例如不同的视图控制器)是否是一种好的编程风格

ProjectAppDelegate *appDelegate = (ProjectAppDelegate *)[[UIApplication sharedApplication] delegate];

AppDelegate 实际上只是一个“监听器”类。该类具有在应用程序更改状态时调用的委托方法,例如在启动、进入后台、终止等期间。您的应用程序有机会响应这些应用程序状态的更改,并且应该以这种方式使用。

将全局变量放在 AppDelegate 中的原因可能看起来很有用,因为 AppDelegate 实际上是一个共享类(单例),可以在应用程序的任何位置访问。但是,这仍然不能使它打算保存全局变量。

这实际上仅取决于您的应用程序架构以及您如何遵循模型-视图-控制器范式。这是一个示例:如果您要在 AppDelegate 中实现 CoreLocation 以获取用户的位置,那么您可以从项目中的任何其他类访问用户位置数据。但是,您可以轻松地拥有一个单独的位置管理器类,然后使用 NSNotification 通知其他类已找到新位置。第三种可能性是使位置管理器类成为共享单例,然后访问全局数据。最后,这三者都有效,这取决于你如何构建你的应用程序。

但是,我会尽我所能保持 AppDelegate 特定于响应应用程序状态的变化。我会避免在 AppDelegate 中放置太多全局变量,因为这不是 AppDelegate 的用途。

于 2013-01-16T08:35:54.063 回答