【发布时间】:2010-03-11 02:55:07
【问题描述】:
我有一个NSMutableArray,其中填充了字符串对象。为简单起见,我们将说对象是一个人,每个人对象都包含有关该人的信息。
因此我会有一个 NSMutableArray 填充了个人对象:
person.firstName
person.lastName
person.age
person.height
等等。
初始数据源来自网络服务器,并在我的应用程序加载并完成与服务器的初始化时填充。我的应用程序会定期轮询服务器以获取最新的名称列表。
目前我正在创建结果集的NSArray,清空NSMutableArray,然后用NSArray 结果重新填充NSMutableArray,然后销毁NSArray 对象。
这在某些层面上对我来说似乎效率低下,并且还给我带来了丢失表行引用的问题,我可以解决这个问题,但这样做可能会为自己创造更多的工作。
效率低下似乎是我应该能够比较两个数组并最终得到过滤的NSArray。然后我可以将过滤后的集合添加到NSMutableArray。这意味着我可以简单地将新数据附加到NSMutableArray,而不是丢弃所有内容并重新填充。
相反,我需要反向执行相同的过滤器,以查看是否有需要从 NSMutableArray 中删除的记录。
有什么方法可以更有效地做到这一点吗?我是否忽略了文档中某些地方提到了一种更简单的技术?
我在清空NSMutableArray 并重新填充时遇到问题,因为任何引用表都会丢失其选定的行状态。我可以跟踪它并重新选择它,但我的理论是使用某种形式的比较和添加对象和删除对象而不是在一个块中处理整个数组可能意味着我保留我的行引用(假设该项目不是当然删除)。
非常感谢任何建议或帮助。
更新
对每个比较每个订单项进行快速枚举会不会和我一样快?这似乎是一个昂贵的操作,但使用最后一个快速枚举代码可能会非常高效......
解决方案
我最终接受了 Abizem 的建议。在处理大量数据时,创建数组的可变副本和对象的副本似乎比使用 sbooth 的解决方案稍微快一些。两者都工作得很好,我只是通过使用可变复制方法获得了更多优势。话虽如此,它确实让我看到了我以前没有看过的 NSSet。
感谢您的反馈。
【问题讨论】:
-
为什么不测试一下看看呢?不要过早优化。
-
在这个过程中:-)我会更新我的发现但是如果有人这样做并且知道......好吧......:-)
标签: objective-c cocoa compare nsmutablearray nsarray