iOS自动释放池的应用

自动释放池在arc里边照样能用得到,在某些场景下能够起到很大的作用。在今天的开发中遇到了批量压缩图片的操作,当然是在for循环里做的操作,在没用到自动释放池的时候程序会在处理图片多以及图片较大的时候会造成内容到达峰值限制而崩溃。下面我把原始代码和新代码贴出来,大家可以对比一下并学习一下。

//其中imgPaths是将要处理图片的路径
//原始代码
for (NSString *imgPath in imgPaths) {
        if (![self isImage:imgPath]) { return; }
        NSData *aData = [NSData dataWithContentsOfFile:imgPath];
        UIImage *aImg = [UIImage imageWithData:aData];
        aImg = [self fixOrientation:aImg];
         if ([self isCanReduceFile:imgPath] ) {
             [self reduceImage:aImg path:imgPath];
         }
    }

//修改过后的代码
for (NSString *imgPath in imgPaths) {
     if (![self isImage:imgPath]) { return; }
     @autoreleasepool {
          NSData *aData = [NSData dataWithContentsOfFile:imgPath];
          UIImage *aImg = [UIImage imageWithData:aData];
          aImg = [self fixOrientation:aImg];
          if ([self isCanReduceFile:imgPath] ) {
              [self reduceImage:aImg path:imgPath];
          }
      }
}

注意:在处理大量大数据的时候需要用到自动释放池,如果不用很容易造成程序因到达内存峰值上限而崩溃

2
说点什么

avatar
2 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
星辰皓月 Recent comment authors
  Subscribe  
最新 最旧 得票最多
提醒