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

24

Core Data中的To-Many关系由NSSet表示(通过使用Editor... Create NSManagedObject Subclass..菜单自动生成)。

迭代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];
}

还有其他的方法吗?


这个页面:http://cocoawithlove.com/2008/08/nsarray-or-nsset-nsdictionary-or.html 说通过NSArray进行迭代比使用NSSet要快得多,分别是0.004713秒和0.025864秒。 - ikevin8me
1个回答

20
第一种方法可能更有效率。如果后者更有效率,那么苹果公司会直接使用该路线来实现前者。
话虽如此,如果你问这个问题是因为性能似乎存在问题,那么问题更多的可能是你花费了很多时间在Core Data故障对象的处理上。一个聪明的做法是在groups上对self in %@进行一次获取; 将获取请求的returnsObjectsAsFaults设置为NO,并确保指定了任何适当的relationshipKeyPathsForPrefetching。其净效应将是在单次访问后端存储时获取要迭代的所有数据,而不是在大量单独的访问中按需获取每个单独的数据片段。

1
参考:减少故障开销 来自苹果文档。 - Franklin Yu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接