Objective-C/Cocoa:代表和控制器的正确设计

Jak*_*ake 7 cocoa objective-c touch

考虑以下常见情况:

MainView的Cocoa应用程序中有一些是从NIB加载的,它由a控制MainViewController.你MainView包含一些控件,比如a UILabel infoLabel.您还有一个委托MyDelegate类,它接收某种事件.

您希望确保在MyDelegate收到其事件时,infoLabel已适当更新.但是,问题是MyDelegate没有引用MainViewMainViewController不知道标签.

一种解决方案是传递MainViewController对委托对象的引用,但这感觉不对,因为您可能会发现自己处于对象具有彼此引用的不良情况.

解决这个问题的正确设计是什么?

Jak*_*ake 4

在一个未透露姓名的开发者论坛中,有人写道:

因此,长话短说,我决定开始使用 NSNotifications。人们一直关注的斯坦福在线课程是由两位苹果工程师教授的。他们刚刚明确表示不要使用应用程序委托或全局变量,并表示要使用 NSNotifications、委托和 KV 观察。

如果苹果工程师是这么说的,我就会朝这个方向前进。

NSNotifications 非常巧妙,因为它们并没有真正干扰封装。侦听器仅侦听通知和对象 - 我认为它不必知道或关心是谁发送的。

因此,在您的示例中,我会考虑让委托发布标签已更改的通知,或者最好让控制器观察该属性(如果可能)。