我注意到即使我将*stop
BOOL
指针设置为YES
,我的枚举块也会被执行两次。我认为设置*stop = YES
会在第一个之后停止吗?
[lib enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
NSLog(@"Enumerating a group");
//should stop after first?
*stop = YES;
} failureBlock:^(NSError *error) {
}];
日志:
2014-03-05 12:27:29:363 AppName[3625:1547] Enumerating a group
2014-03-05 12:27:29:379 AppName[3625:1547] Enumerating a group
从文档中,-enumerateGroupsWithTypes:usingBlock:
是异步的,但它是否也自动并行化?两个枚举都发生在主线程上,所以也许我应该强制执行自己的停止?如果没有按照文档建议的方式严格执行,那么提供stop
似乎很奇怪。
修改
为了它的价值,我加入了自己的执法,并且它有效。但为什么我需要这样做?
__block BOOL stopItForReal = NO; [lib enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { NSLog(@"Enumerating a group"); //does not stop enumeration *stop = YES; //actually stops enumeration. I win, runtime! if (stopItForReal) return; stopItForReal = YES; } failureBlock:^(NSError *error) { }];
答案 0 :(得分:3)
当群组枚举终止时,ALAssetsLibraryGroupsEnumerationResultsBlock
会调用group = nil
。所以你可以这样写:
if (group != nil)
{
// your code.
}