框架不会在单独的线程上运行这些块。它只是在同一个运行循环中将它们作为附加事件运行。为了证明这一点,试试这个
[library enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:[^(ALAssetsGroup * group, BOOL * stop)
{
if([NSThread isMainThread])
{
NSLog(@"main");
}
else
{
NSLog(@"non-main");
}
} copy]
failureBlock:^(NSError * err)
{NSLog(@"Erorr: %@", [err localizedDescription] );}];
[library release];
if([NSThread isMainThread])
{
NSLog(@"main");
}
else
{
NSLog(@"non-main");
}
我的输出是
main
main
main
这意味着该块正在主线程中被调用。这只是一个单独的事件。要解决您的问题,您只需要在到达最后一步时从块内以某种方式返回您的值。您可以说这是最后一步,因为您的块将使用 nil 来调用组对象。
编辑:例如使用这个块
^(ALAssetsGroup * group, BOOL * stop)
{
if(group == nil)
{
// we've enumerated all the groups
// do something to return a value somehow (maybe send a selector to a delegate)
}
}