码迷,mamicode.com
首页 > 移动开发 > 详细

iOS频繁打开相册崩溃: ALAssetsLibrary error - “Too many contexts. No space in contextList.”

时间:2015-01-06 11:40:30      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

iOS频繁打开相册崩溃: ALAssetsLibrary error - “Too many contexts. No space in contextList.”

http://stackoverflow.com/questions/13480611/has-anyone-experienced-crashes-when-using-alassetslibrary-in-a-background-thread

 

原因:

因为频繁的调用  

[[ALAssetsLibrary alloc] init]

即使你相册关闭, 但如果频繁调用这句话, 在ARC方式下, 估计iOS也没有及时清空内存, 

就会导致 “Too many contexts. No space in contextList.”

 

因此, 解决方式就是使用单例调用.

 

+ (ALAssetsLibrary *) defaultAssetsLibrary
{
    static dispatch_once_t pred = 0;
    static ALAssetsLibrary *library = nil;
    dispatch_once(&pred, ^{
        library = [[ALAssetsLibrary alloc] init];
    });
    return library;
}

 

 或者我用了 DBCamera 库, 它已经提供了一个方法, 直接用也行.

 ALAssetsLibrary *sharedLibrary = [[DBLibraryManager sharedInstance] defaultAssetsLibrary];
        [sharedLibrary enumerateGroupsWithTypes:ALAssetsGroupAll
                                     usingBlock:^(ALAssetsGroup *group, BOOL *stop)
         {
             if (group)
             {
                 NSString *nameStr = [group valueForProperty:ALAssetsGroupPropertyName];
                 
         }
                             failureBlock:^(NSError *error)
         {
             NSLog(@"failureBlock");
         }];

  

 

测试后已经不那么容易崩溃了.

 

iOS频繁打开相册崩溃: ALAssetsLibrary error - “Too many contexts. No space in contextList.”

标签:

原文地址:http://www.cnblogs.com/willbin/p/4205565.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!