IOS应用程序代理

IOS应用程序代理,ios,appdelegate,Ios,Appdelegate,我非常感谢您对以下用于访问全局变量的代码的使用的意见,这些代码用于在IOS 5及以上版本中创建应用程序 ProjectAppDelegate *appDelegate = (ProjectAppDelegate *)[[UIApplication sharedApplication] delegate]; 上述内容是否被视为面向对象编程?我不会问它是否被视为面向对象编程。面向对象编程是一个单独的主题,涉及使用具有属性和方法的交互对象。这与您的问题无关,您的问题是如何在AppDelegate中访

我非常感谢您对以下用于访问全局变量的代码的使用的意见,这些代码用于在IOS 5及以上版本中创建应用程序

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

上述内容是否被视为面向对象编程?

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

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

ProjectAppDelegate *appDelegate = (ProjectAppDelegate *)[[UIApplication sharedApplication] delegate];
AppDelegate实际上只是一个“侦听器”类。该类具有在应用程序更改状态时调用的委托方法,例如在启动、进入后台、终止等过程中。应用程序有机会响应应用程序状态的这些更改,应该这样使用

将全局变量放入AppDelegate似乎很有用,因为AppDelegate实际上是一个共享类(单例),可以在应用程序中的任何位置访问。然而,这仍然不意味着它打算保存全局变量

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


但是,我会尽力使AppDelegate特定于响应应用程序状态的更改。我会避免在AppDelegate中放入太多全局变量,因为它不是AppDelegate的用途。

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

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

ProjectAppDelegate *appDelegate = (ProjectAppDelegate *)[[UIApplication sharedApplication] delegate];
AppDelegate实际上只是一个“侦听器”类。该类具有在应用程序更改状态时调用的委托方法,例如在启动、进入后台、终止等过程中。应用程序有机会响应应用程序状态的这些更改,应该这样使用

将全局变量放入AppDelegate似乎很有用,因为AppDelegate实际上是一个共享类(单例),可以在应用程序中的任何位置访问。然而,这仍然不意味着它打算保存全局变量

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


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

感谢您的时间,顺便说一下,考虑到数据的所有权,我提到了OOP,这可能与此无关;没问题,如果没有其他问题,请接受答案。许多程序员尝试通过创建通过某种消息传递系统相互通信的组件来解耦他们的体系结构。重要的是要理解,所有这些系统最终都依赖于某种中央节点,该节点负责处理从一个组件到另一个组件的数据传递。例如,PureMVC有Facade的概念。我经常使用AppDelegate扮演类似的角色。感谢您的时间,顺便说一句,考虑到数据的所有权,我提到了OOP,这可能是不相关的;没问题,如果没有其他问题,请接受答案。许多程序员尝试通过创建通过某种消息传递系统相互通信的组件来解耦他们的体系结构。重要的是要理解,所有这些系统最终都依赖于某种中央节点,该节点负责处理从一个组件到另一个组件的数据传递。例如,PureMVC有Facade的概念。我经常将AppDelegate用于类似的角色。