首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AssetsLibrary框架的内存管理问题

AssetsLibrary框架的内存管理问题
EN

Stack Overflow用户
提问于 2011-11-04 14:19:05
回答 1查看 909关注 0票数 1

我的代码花了很多时间从图库中加载图像。我将每个图像的网址存储在数据库中,然后使用AssetsLibrary框架从图库中加载它们。但是我注意到它占用了更多的内存,所以我收到了内存警告。过了一段时间,应用程序崩溃了。我把我的代码放在这里。

代码语言:javascript
复制
-(void) nextImageLoad
{
//    ALAssetsLibrary* self. assetslibrary=[[ALAssetsLibrary alloc] init];
    self.myScrollView.pagingEnabled=YES;
    NSLog(@"current :- %d, loaded_photo :- %d, [imageData count] :- %d",current, loaded_photo, [imageData count]);

    if(current>loaded_photo && current < [imageData count])
    {
        ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
        {
            self.rep = [myasset defaultRepresentation];
            CGImageRef iref = [self.rep fullResolutionImage];
            if (iref) 
            {

                UIImageView *temp = [[UIImageView alloc] initWithFrame:CGRectMake(self.x, y, 300, 300)];
                temp.image=[UIImage imageWithCGImage:iref];     

                [self.myScrollView addSubview:temp];
                [temp release];


                [myScrollView setContentSize:CGSizeMake(self.x+600, 410)];
                [myScrollView setAutoresizesSubviews:YES];

            }
            else
            {

            }
        };

        ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
        {
            NSLog(@"booya, cant get image - %@",[myerror localizedDescription]);
        };

        [self.assetslibrary assetForURL:[NSURL URLWithString:[[self.imageData objectAtIndex:current] valueForKey:@"photo_url"] ]
                       resultBlock:resultblock
                      failureBlock:failureblock];
         self.x=self.x+320;
        loaded_photo= loaded_photo+1;
    }



}

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    lastContentOffset = scrollView.contentOffset.x;
}
-(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    if (lastContentOffset > scrollView.contentOffset.x)
    {        
        NSLog(@"left");   
        if(current>0)
        current=current-1;
    }
    else if (lastContentOffset < scrollView.contentOffset.x) 
    {
        NSLog(@"right");
        current=current+1;
        [self nextImageLoad];        

    }
    lastContentOffset = scrollView.contentOffset.x;


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-07 19:47:36

很难知道这是否是问题所在,但请尝试在所有块中创建一个自动释放池:

代码语言:javascript
复制
block = ^(ALAsset *myasset)
{
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

  // rest of block here

  [pool release];
}

还请记住,如果您在块内提前返回,则需要在return语句之前释放pool对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8005555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档