EEE*_*EEE 67 iphone delegates protocols objective-c nsnotifications
每个人的利弊是什么?
我应该在哪里专门使用它们?
not*_*oop 103
这里的经验法则是有多少客户希望收到有关活动的通知.如果它主要是一个对象(例如,关闭视图或对单击的按钮采取行动,或对下载失败做出反应),那么您应该使用委托模型.
如果您发出的事件可能同时引起许多对象的兴趣(例如屏幕旋转,内存使用,用户登录/注销),那么您应该使用NSNotificationCenter.
Sha*_*ver 12
通知通常更好地通知UI其他线程上发生的更改.出于稳定性和性能原因,Apple的文档强烈反对在可能的情况下跨线程使用委托.在Mac上,他们建议使用Bindings,但由于它们不存在于iPhone上,通知可能是您的下一个最佳选择.
考虑到性能是一个好主意(对于少量通知对象更好地委托,对更多对象更好地通知中心,或者是运行探查器)但是我认为更重要的因素是因为你在谈论Objective-C和不太可能谈论代码库的真正高性能部分(可能用C编写)正在减少模块之间的编译时依赖性.
没有什么可以阻止你拥有一组代表而不是一个代表.
我可能只将NSNotificationCenter用于我制作的任何网络堆栈组件的状态以及任何自定义设备状态监视接口.但是对于大多数耦合而言,与应用程序的全局状态无关,我认为在大多数情况下使用Objective-C中的普通接口合同更加清晰,而且对于追随您的人来说比使用NSNotificationCenter更容易.事实上,我从未将NotificationCenter用于我自己的自定义事件,并且更喜欢使用委托来方便其他人阅读我的代码来理解代码.
最后,当然,对于标准API的通知,您无法选择,并且必须使用Apple为特定事件禁用的两种方法中的任何一种.
小智 6
通知更适合解耦UI组件.它允许您在控制器或模型中插入任何视图而无需任何修改.松散耦合设计绝对更好.
但是,对于委派和通知之间的性能,您需要考虑呼叫的频率.
对于更频繁的事件,委派可能更好,对于频率较低的事件,通知更好,但更多的收件人.这取决于项目选择的内容.