如何有效地迭代NSSet(Objective-C) - 核心数据中的To-Many关系表示?

ike*_*8me 23 iphone cocoa operating-system objective-c ios

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

哪种迭代NSSet*最有效?

NSSet* groups = [contact groups];
for(Group* group in groups) {
    NSString* groupName = [group name];
}
Run Code Online (Sandbox Code Playgroud)

要么

NSSet* groups2 = [contact groups];
NSArray* groupsArray = [groups2 allObjects];
for(Group* group in groupsArray) {
    NSString* groupName = [group name];
}
Run Code Online (Sandbox Code Playgroud)

或另一种方式?

Tom*_*mmy 19

第一个可能更有效率.如果后者效率更高,那么Apple只会使用该路线来实现前者.

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