objectsPassingTest:Vs filteredSetUsingPredicate:?

时间:2011-12-04 03:07:50

标签: objective-c core-data foundation nsset

我希望AccountUser linkedAccount类型为LinkedAccountFacebook,其中AccountUser有许多LinkedAccount(核心数据中)。< / p>

哪个更好用?

  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

  4. 执行获取请求

    或者,有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

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

`linkedAccounts'是错吗?那它已经在记忆中吗?如果是这样,我会使用(2.)。如果数据仍在您的后备存储ID中,则执行获取请求,并使用谓词过滤到您需要的链接帐户类型(3。)

或者如果您打算提取所有其他类型,也许最好先提取它们。

并排尝试并运行仪器时间分析器。