因此,在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应该等待。
答案 0 :(得分:0)
-enumerateGroupsWithTypes:...
和-enumerateAssetsUsingBlock:...
的文档并未说明这些方法是同步执行的。根据您的发现,看起来他们在不同的线程上进行枚举,这样您就不必等待。