我很感激您对以下用于访问全局变量的代码在IOS 5及更高版本中创建应用程序的用法的看法
ProjectAppDelegate *appDelegate = (ProjectAppDelegate *)[[UIApplication sharedApplication] delegate];
以上是否被视为面向对象的编程?
答案 0 :(得分:4)
我不会问它是否被认为是面向对象的编程。面向对象编程是关于使用具有属性和方法的交互对象的单独主题。这与您的问题无关 - 这是在AppDelegate中访问全局变量的用法。
我认为您真正要问的是,将全局变量放在AppDelegate中然后使用代码行访问程序中任何位置的变量(例如不同的视图控制器)是不错的编程风格
ProjectAppDelegate *appDelegate = (ProjectAppDelegate *)[[UIApplication sharedApplication] delegate];
AppDelegate实际上只是一个“倾听者”的类。该类具有在应用程序更改状态时调用的委托方法,例如在启动,进入后台,终止等期间。应用程序可以响应应用程序状态的这些更改,并且应该以这种方式使用。< / p>
将全局变量放在AppDelegate中的原因似乎很有用,因为AppDelegate实际上是一个可以在应用程序中的任何位置访问的共享类(单例)。但是,这仍然无法保存全局变量。
这实际上取决于您的应用程序架构以及您如何遵循模型 - 视图 - 控制器范例。下面是一个示例:如果您要在AppDelegate中实现CoreLocation以获取用户的位置,那么您可以从项目中的任何其他类访问用户位置数据。但是,您可以轻松地拥有一个单独的位置管理器类,然后使用NSNotification通知其他类已找到新位置。第三种可能性是使位置管理器类成为共享单例,然后访问全局数据。最后,所有这三项工作都取决于您如何构建应用程序。
但是,我会尽力保持AppDelegate特定于响应应用程序状态的更改。我会避免在AppDelegate中放入太多的全局变量,因为它不是AppDelegate的用途。