【问题标题】:"Delegates or NSNotifications" Adjudging performance of code?“代表或 NSNotifications” 判断代码的性能?
【发布时间】:2012-09-07 11:23:14
【问题描述】:
在我的应用程序中,我必须将图像文件显示为表格视图中的列表,以全尺寸和多个缩略图的形式显示它们。因此,基本上我开发了三个单独的类来处理这三个视图。现在要执行任何文件操作,我可以想到两种方法:
为所有这些类创建 appdelegate 对象,并相应地处理它们。当在一个类中对照片文件执行一项操作时,所有其他类都使用 NSNotification 通知,将 obeserver 保持为 Appdelegate 对象。
在需要时为这些类创建本地对象,并分配委托以通过调用相关方法从一个类执行文件操作。
但是,我无法判断哪种方法在内存使用和性能方面会更好?提前致谢。
【问题讨论】:
标签:
objective-c
memory-management
nsnotificationcenter
performance-testing
nsnotifications
【解决方案1】:
使用一对一的直接消息传递关系是更简单的关系和通信/消息传递方式。支持委托回调 -- 第 2 号。
使这种设计具有双向性也很容易——如果视图离开屏幕,您可以执行取消操作。如果加载失败,更容易通知控制器。
NSNotifications 相对重量级。没必要。
在单例(应用程序委托)中存储一堆东西可能会导致一些不必要的保留对象。如果您的程序是并发的,那么这会增加更多的复杂性。不需要任何这种复杂性或引入可变全局状态,也没有理由提出对象应该具有更大的访问范围和生命周期。
除此之外,您还可以针对特定需求进行优化,但我目前看不到任何需求。
【解决方案2】:
这在很大程度上取决于代码以及您构建应用程序的方式。我一般在以下情况下使用委托:
- 委托对象存在于需要它的主要对象之前和之后的位置。换句话说,主对象不需要担心它的委托的生命周期。
- 对象与其委托对象之间的关系是严格的一对一关系。换句话说,只有一个委托对象需要与主对象交互。我已经看到了代表被换入和换出的情况,我不推荐这样的代码。
- 主要对象需要来自委托的信息。
我会在以下情况下使用通知:
- 多个对象需要知道另一个类中发生的事情。
- 主类不需要与其他类交互,甚至不需要知道它们的存在。
无论您选择哪一个,我都不会为每个图像拥有一个以上的文件管理对象。简单的原因是拥有多个意味着您需要确保它们都具有相同的状态,因此可以相互通信。否则会出现错误。