如何有效地迭代 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