Блок обычно запускается в вашем основном потоке, вызываемая вами функция является асинхронной частью.Блок часто используется, чтобы знать, когда функция, которую вы вызвали асинхронно, завершена.В этом конкретном случае быстрый просмотр справочного материала говорит нам о том, что:
Блок для вызова, используя каждый актив по очереди.Когда перечисление завершено, enumerationBlock вызывается с группой, установленной на nil.
Так что в этом случае просто ищите этот nil!
РЕДАКТИРОВАТЬ:
Для проверки на ноль попробуйте что-то вроде этого
ALAssetsLibrary *lib = [ALAssetsLibrary new];
[lib enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group == nil) {
NSLog(@"Done!");
}
}
failureBlock:^(NSError *error) {
NSLog(@"Failed...");
}
];
И если вы хотите проверить, если вы в настоящее время в основном потоке, вы можете использовать:
NSLog("On main thread : %d",[NSThread isMainThread] ? 1:0);
При таких вызовах API блок выполняется в главном потоке, потому что они не являются «тяжелой» частью функции.Код, который потенциально может заблокировать ваш пользовательский интерфейс, все еще выполняется в фоновом режиме.В этом конкретном случае более того, что функция «возвращается в эфир» и спрашивает вас, что вы хотите сделать для данной группы, а затем возвращается в фоновый режим.