如何有效地迭代 NSSet (Objective-C) - Core Data 中的多对多关系表示?

Posted

技术标签:

【中文标题】如何有效地迭代 NSSet (Objective-C) - Core Data 中的多对多关系表示?【英文标题】:How to iterate an NSSet (Objective-C) - To-Many relationship representation in Core Data - efficiently? 【发布时间】:2012-09-28 07:10:51 【问题描述】:

Core Data 中的多对多关系由 NSSet 表示(使用编辑器自动生成...创建 NSManagedObject 子类...菜单。

迭代 NSSet* 最有效的方法是什么?

NSSet* groups = [contact groups];
for(Group* group in groups) 
    NSString* groupName = [group name];

NSSet* groups2 = [contact groups];
NSArray* groupsArray = [groups2 allObjects];
for(Group* group in groupsArray) 
    NSString* groupName = [group name];

还是其他方式?

【问题讨论】:

此页面:cocoawithlove.com/2008/08/nsarray-or-nsset-nsdictionary-or.html 表示遍历 NSArray 比 NSSet 快得多,0.004713 秒对 0.025864 秒。 【参考方案1】:

第一个可能更有效。如果后者效率更高,那么 Apple 会简单地使用该路径来实现前者。

话虽如此,如果您之所以问,是因为性能似乎是一个问题,那么您可能更多的是花费大量时间在核心数据的故障对象上。明智的做法是使用groups 获取self in %@;将获取请求的returnsObjectsAsFaults 设置为NO,并确保指定了任何适当的relationshipKeyPathsForPrefetching。这样做的最终结果是,您将要迭代的所有数据都是在一次到后备存储的行程中获取的,而不是在大量单独的行程中按需获取其中的每一个数据。

【讨论】:

参考:Decreasing Fault Overhead 来自 Apple 文档。

以上是关于如何有效地迭代 NSSet (Objective-C) - Core Data 中的多对多关系表示?的主要内容,如果未能解决你的问题,请参考以下文章

IOS/Objective-C/CoreData:以一对多关系编辑NSSet

objective-c怎么代码触发按钮点击事件

如何在 Python 指针中有效地迭代数组?

如何从包含任意对象的 NSSet 创建排序的 NSArray?

如何有效地迭代 Java Map 中的每个条目?

如何有效地对抽象列表进行嵌套迭代?