objective-c - 对象通过测试 : Vs filteredSetUsingPredicate:?

标签 objective-c core-data foundation nsset

我想获得 AccountUserlinkedAccount 类型 LinkedAccountFacebook,其中 AccountUser 有很多 LinkedAccount 的(在核心数据中)。

哪个更好用?

  1. objectsWithOptions:passingTest:

    NSSet *facebookLinkedAccounts =
    [activeAccountUser.linkedAccounts objectsWithOptions:NSEnumerationConcurrent passingTest:^BOOL(id obj, BOOL *stop) {
        if ([(LinkedAccount *)obj hasType:LinkedAccountTypeFacebook]) {
            *stop = YES;
            return YES;
        } else {
            return NO;
        }
    }];
    
  2. filteredSetUsingPredicate:

    NSSet *facebookLinkedAccounts =
    [activeAccountUser.linkedAccounts filteredSetUsingPredicate:
     [NSPredicate predicateWithFormat:@"type == %i", LinkedAccountTypeFacebook]];
    
  3. 通过 NSManagedObjectContext 执行获取请求。

或者,有更好的方法吗?

最佳答案

调用 activeAccountUser.linkedAccounts 将从核心数据中获取它们(如果它们是错误的),假设您已经建立了关系。

“linkedAccounts”是错误的吗?即它已经在内存中了吗?如果是这样,我会使用 (2.)。如果数据仍在您的后备存储 ID 中,请使用谓词过滤到您需要的链接帐户类型执行提取请求 (3.)

或者,如果您打算无论如何都获取所有其他类型,也许最好先获取所有类型。

并排尝试它们并在它们上运行 Instruments 时间分析器。

关于objective-c - 对象通过测试 : Vs filteredSetUsingPredicate:?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8372953/

相关文章:

iphone - 如何使用 UIMarkupTextPrintFormatter 打印带有本地镜像的本地 html?

ios - CoreData 限制相关实体的批量大小

ios - NSURLComponents 获取百分比编码

iphone - 水平重新定位 UIBarButtonItem

objective-c - iPhone : access constant values

objective-c - 如何检查传入的 JSON feed 是否包含单个或多个记录?

cocoa - NSArrayController 返回 null

swift - 我如何在核心数据中实现父子关系?

ios - NSPortMessage 在 iOS API 中吗?

ios - Xcode6 中的 Swift 类与 Cocoa Touch 类