3

我想得到一个AccountUser类型linkedAccountLinkedAccountFacebook其中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.

或者,有没有更好的方法来做到这一点?

4

1 回答 1

2

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

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

或者,如果您无论如何都打算获取所有其他类型,那么最好预先获取它们。

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

于 2012-01-20T16:18:19.760 回答