loadView работает быстрее, чем получение изображений через активы - PullRequest
0 голосов
/ 24 июня 2011

Итак, в функции init я получаю изображения через AssetsLibrary

// initWithNibName:

photoArray = [[NSMutableArray alloc ]init];
    ALAssetsLibrary *asset = [[ALAssetsLibrary alloc] init];
    void (^enumerateGroup)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop)
    {
        if (result != nil) {
            [photoArray addObject:result];
            NSLog(@"%@", result);
        }

    };
    void (^enumerationBlock)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop)
    {
        if (group != nil) {
            [group enumerateAssetsUsingBlock:enumerateGroup];
        }
    };
    [asset enumerateGroupsWithTypes:ALAssetsGroupAll 
                         usingBlock:enumerationBlock 
                       failureBlock:^(NSError *error) {NSLog(@"Something went wrong");}];
    [asset release];

// loadView

- (void)loadView
 {
UIView *view = [[UIView alloc ] init];
NSLog(@"%d", [photoArray count]);
self.view = view;
[view release];
}

Журнал с консоли:

2011-06-24 18: 55: 12.255 xxx [9450: 207] 0 //

2011-06-24 18: 55: 12.306 xxx [9450: 207] ALAsset - Тип: Фото, URL-адреса: { "public.jpeg" = "assets-library: //asset/asset.JPG? id = 1000000001 & ext = JPG";

И я в замешательстве. Как вы можете видеть в журнале, loadView выполнял код быстрее, чем initWithNibName. Это потому, что получение изображений через AssetLibrary занимает некоторое время. Но я думаю, что весь этот код выполняется в одном потоке, поэтому loadView должен ждать initWithNibName.

1 Ответ

0 голосов
/ 24 июня 2011

В документации для -enumerateGroupsWithTypes:... и -enumerateAssetsUsingBlock:... не говорится, что эти методы выполняются синхронно.Судя по тому, что вы нашли, похоже, что они выполняют перечисление в другом потоке, так что вам не нужно ждать.

...