我对 iOs 开发还很陌生,我有点困惑我应该如何分离我的代码以避免巨大的 ViewController.m 文件。目前我的主 View Controller 有很多代表:

@interface ViewController : UIViewController <MKMapViewDelegate, HttpClientDelegate, CLLocationManagerDelegate, NSFetchedResultsControllerDelegate>

我想减少 viewController 代码,我想我应该创建单独的类来处理委托(delegate)任务。问题是,例如,如果我为 CLLocationManager 创建单例类并让它实现委托(delegate)方法,那么我如何与 View Controller 通信?

假设我的 CLLocationManager 收到位置更新,我如何告诉 viewController 对 UI 进行更改?我应该使用 NSNotificationCenter 发布通知,然后将观察者添加到 View Controller 吗?或者是让 viewController 像现在一样实现所有委托(delegate)方法的最佳方法?

最佳答案

将某些功能移到您的数据模型中。

考虑到您提供的有限信息,很难说您应该如何管理它,但是您必须怀疑单个 View Controller 是否真的应该管理 map View 并跟踪位置并管理 HTTP 连接和管理核心数据拿来。为什么不将其中的一些移到您的模型中,这样可以更容易地分成模块?



通知将是一个很好的解决方案——它为管理位置的程序部分(同样,这可能属于模型)提供了一种方法来传达更改,而无需特别了解程序部分的任何信息关心位置的变化。它还允许一对多通信——如果您有另一个也关心位置的 View Controller ,它可以观察到相同的通知。



我尽量考虑适本地划分职责,而不是限制代码的大小。如果您有一个只完成一项工作但需要大量代码来完成它的类,那很好。如果你有一个类(class)管理许多不相关的事情,那就不太好了。麻烦的是,很多工作似乎都属于 View Controller 的传统“管理一屏内容”角色。尝试将管理数据呈现的任务(这是 View Controller 的合法工作)与管理数据本身(这是模型的工作)分开。

关于iphone - 将委托(delegate)从 ViewController 分离到自己的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18617457/

10-15 19:09