iOS 解决上传100张图片内存奔溃问题
2017-12-07 16:19
627 查看
最近项目需求,从相册中提取100张图片,然后上传到服务器。前提是图片不能压缩。因为要将图片信息采集出来制作出3D模型。所以必须是高清图片。
先看下代码[NetWorking uploadWithUrl:@"xxx" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { for (int i = 0; i<imageArr.count; i++) { UIImage *image = imageArr[i]; NSData *data = UIImageJPEGRepresentation(image, 1.0); [formData appendPartWithFileData:data name:@"files" fileName:@"xxxx" mimeType:@"image/jpeg"]; } } withProgress:^(NSProgress *uploadProgress) { } success:^(id responseObject) { } failure:^(NSError *error) { }]
如果imageArr是100或者更大的时候,就会导致奔溃。
模拟器弹出的框子是这样说的。
3BE4EE0E-5A0F-408E-B3EE-DA9D0BCFDBAE.png
意思就是内存警告直接把app给carsh掉了
屏幕快照 2017-03-11 上午9.52.23.png
我抓拍的瞬间,内存急速暴涨。
原因: 就是因为image,data的局部变量在内存中没有及时释放导致占用内存过大,导致程序被杀死。
解决方法。及时释放局部变量就可以了。在局部变量中间加入自动释放池。
[NetWorking uploadWithUrl:@"xxx" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { for (int i = 0; i<imageArr.count; i++) { @autoreleasepool { UIImage *image = imageArr[i]; NSData *data = UIImageJPEGRepresentation(image, 1.0); [formData appendPartWithFileData:data name:@"files" fileName:@"xxxx" mimeType:@"image/jpeg"]; } } } withProgress:^(NSProgress *uploadProgress) { } success:^(id responseObject) { } failure:^(NSError *error) { }]
自动释放池概述
自动释放池被置于一个堆栈中,虽然它们通常被称为被“嵌套”的。当您创建一个新的自动释放池时,它被添加到堆栈的顶部。当自动释放池被回收时,它们从堆栈中被删除。当一个对象收到送autorelease消息时,它被添加到当前线程的目前处于栈顶的自动释放池中。你不能向自动释放池发送autorelease或retain消息。Application Kit会在一个事件周期(或事件循环迭代)的开端—比如鼠标按下事件—自动创建一个自动释放池,并且在事件周期的结尾释放它,因此您的代码通常不必关心。 有三种情况您应该使用您自己的自动释放池:
如果您正在编写一个不是基于Application Kit的程序,比如命令行工具,则没有对自动释放池的内置支持;您必须自己创建它们。
如果您生成了一个从属线程,则一旦该线程开始执行,您必须立即创建您自己的自动释放池;否则,您将会泄漏对象。
如果您编写了一个循环,其中创建了许多临时对象,您可以在循环内部创建一个自动释放池,以便在下次迭代之前销毁这些
对象。这可以帮助减少应用程序的最大内存占用量。
作者:王银博 链接:http://www.jianshu.com/p/9e84fe63d5c0 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章推荐
- iOS 解决图片上传后逆时针旋转90度的问题
- iOS指南系列:如何解决奔溃问题-关于内存访问
- IOS应用开发-图片处理(拉伸图片 创建缩略图 解决图片旋转的问题 图片编码及上传 将图片写入磁盘)
- 高清图片上传内存问题解决
- iOS开发 - 完美解决SDWebImage加载多个图片内存崩溃的问题
- IOS中html5上传图片方向问题解决方法
- IOS应用开发-图片处理(拉伸图片 创建缩略图 解决图片旋转的问题 图片编码及上传 将图片写入磁盘)
- iOS关于使用七牛SDK上传多张图片内存不断增加问题的解决方案
- iOS指南系列:如何解决奔溃问题-关于内存访问续
- iOS指南系列:如何解决奔溃问题-关于内存访问
- 解决ios上传的图片旋转问题
- iOS图片占内存过大的问题完美解决
- iOS指南系列:如何解决奔溃问题-关于内存访问续
- 解决iOS上传图片后,图片方向错误的问题
- iOS指南系列:如何解决奔溃问题-关于内存访问续
- vue之图片上传解决图片压缩和ios拍摄的角度旋转的问题
- iOS指南系列:如何解决奔溃问题-关于内存访问续2
- 使用FCKeditor_2.6.3版本有关上传图片问题解决
- [转]在IE7关闭窗口,上传图片无法预览,window.status无效问题解决办法
- FCK上传图片问题解决