使用视图控制器的实例变量进行委托

时间:2015-08-07 14:55:00

标签: ios objective-c delegates

我正在创建一个Obj-C应用程序,正在处理单个视图。但是,在这个视图中,有足够的逻辑,我想将它与视图控制器本身分开。我决定创建一个委托,但我目前的问题是这两个人应该如何沟通。我一直在考虑两种可能的解决方案:

1)委托中视图控制器的实例变量。然后当需要进行任何视图更新时,我只需在该实例变量上调用适当的方法。

2)委托被触发的通知,并将视图控制器添加为观察者。

是否有一种方法明显优越或取决于具体情况?我不知道正确的方法,并试图从正确的角度来解决这个问题。

2 个答案:

答案 0 :(得分:0)

如果您想要与视图控制器分离非UI相关的职责,那么它非常自然,并建议让另一个对象负责这些任务。在这种情况下,您可以为这些职责设置单例,或者只是在视图控制器中强烈引用的NSObject子类实例。

如果您想要与视图控制器分离纯UI相关任务,只是为了更清楚地组织源代码,您应该为视图控制器创建类别,并根据其职责命名类别,例如,MyViewController(本地化),MyViewController(UserInteration)等。

答案 1 :(得分:0)

这是一个广泛的问题。但是,如果您要尝试的只是重构现有代码以便在不更改任何功能的情况下简化维护,请使用实例变量。您的代码执行顺序将保持不变,您的方法可以返回有关执行结果的状态信息。你的原始控制器和你的新重构类是紧密耦合的 - 彼此了解很多。

通知逻辑是基于事件的(发生了一些有趣的事情,并且事件被发送给注册的观察者)。当观察者收到事件时执行逻辑,因此无法保证您可以控制确切的执行顺序,并且调用者不知道观察者是否接收到或成功处理了消息 - 松散耦合。

如有疑问,请查看Apple在其UITableView等框架类中所做的工作。代表们可以很好地控制事情的发生时间。

相关问题