自动释放池在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];
}
}
}
注意:在处理大量大数据的时候需要用到自动释放池,如果不用很容易造成程序因到达内存峰值上限而崩溃
autoreleasepool(invoking: { () -> Result in
swift写法不太一样