框架沒有按」在一個單獨的線程上運行這些塊。它只是在同一個運行循環中將它們作爲附加事件運行。爲了證明這一點,試試這個
[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)
}
}
你能告訴我更多關於該解決方案? – MatterGoal 2011-04-28 12:07:09