loadView比通过Assets获取图像更快

时间:2011-06-24 17:02:50

标签: iphone assetslibrary

因此,在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 - 类型:照片,网址:{     “public.jpeg”=“assets-library://asset/asset.JPG?id = 1000000001& ext = JPG”;

我很困惑。正如您在日志中看到的那样,loadView执行的代码比initWithNibName更快。这是因为通过AssetLibrary获取图像需要一些时间。但我认为所有这些代码都在一个线程中执行,因此对于initWithNibName,loadView应该等待。

1 个答案:

答案 0 :(得分:0)

-enumerateGroupsWithTypes:...-enumerateAssetsUsingBlock:...的文档并未说明这些方法是同步执行的。根据您的发现,看起来他们在不同的线程上进行枚举,这样您就不必等待。