ios-屏幕截图时会报内存不足

问题描述

屏幕截图时会报内存不足
捕捉视图的屏幕截图,保存图片在文件夹中:

CGSize size = self.view.bounds.size;CGRect cropRect;CGRect screenBounds = [[UIScreen mainScreen] bounds];if([self isPad]){    cropRect = CGRectMake(145 110 476 476);}else{    if (screenBounds.size.height ==568)    {        cropRect = CGRectMake(40 69 240 240);    }    else    {        cropRect = CGRectMake(40 62 240 240);    }}/* Get the entire on screen map as Image */UIGraphicsBeginImageContext(size);[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];UIImage * mapImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();/* Crop the desired region */CGImageRef imageRef = CGImageCreateWithImageInRect(mapImage.CGImage cropRect);UIImage * cropImage = [UIImage imageWithCGImage:imageRef];CGImageRelease(imageRef);/* Save the cropped image UIImageWriteToSavedPhotosAlbum(cropImage nil nil nil);*///save to document folderNSData * imageData = UIImageJPEGRepresentation(cropImage 1.0);NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory NSUserDomainMask YES);NSString* documentsDirectory = [paths objectAtIndex:0];    imagename=[NSString stringWithFormat:@""Fff.jpg""];NSString* fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imagename];////NSLog(@""full path %@""fullPathToFile);[imageData writeToFile:fullPathToFile atomically:NO];

在截图15到20次后,就会出现内存空间不足的警告,然后应用就会崩溃。

不知道有没有更好的方法不引起这种内存问题?

解决方案

这说明内存并没有被释放干净一个简单的做法是用
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
//这里写截图并保存的代码
[pool release];
这应该能够显著提高性能

时间: 2024-10-30 02:27:36

ios-屏幕截图时会报内存不足的相关文章

求助大神进来看下ios程序运行报错如何解决

问题描述 求助大神进来看下ios程序运行报错如何解决 解决方案 自己研究研究找找百度 解决方案二: [subDict objectForKey: removeObjectForKey:key]; 看不懂,哪有这个方法啊.

new-短信猫smslib,终端at ok,在srv.stopService()时会报空指针,求大神解决

问题描述 短信猫smslib,终端at ok,在srv.stopService()时会报空指针,求大神解决 1.这几个东西也是按照这个放的 comm.jar 放到 已放入java_homejirelibext javax.comm.properties 已放入java_homejirelib win32com.dll 已放入java_homejirebin 2.我的操作系统是win7 64位的 3.代码如下 package driver; import org.smslib.Library; i

task-使用spring自带的Task,放在服务器上启动时会报错

问题描述 使用spring自带的Task,放在服务器上启动时会报错 spring-mvc org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class Caused by: java.lang.TypeNotPresentException: Type java.lang.annotation.Repeatable not present at co

代码-cvCreateImage报内存错误,一直想不明白,求帮忙>_<...

问题描述 cvCreateImage报内存错误,一直想不明白,求帮忙>_<... IplImage *target = NULL;target = cvCreateImage(cvSize(dxdy)IPL_DEPTH_8U1); //target = cvCreateImage(cvSize(4040)IPL_DEPTH_8U1); dxdy是代码中可以求得的,cvSize没有问题,后面无法获得地址,换成固定大小的也不可以,报错如下: 解决方案 debug版本和Release版本的OpenC

poi处理excel大数据量的导入会报内存溢出

问题描述 poi处理excel大数据量的导入会报内存溢出 XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(fileName())); 就是单独执行这行代码都不行,报内存溢出,我把虚拟机都设置成最大了也溢出 差不多10万行吧 解决方案 poi大数据量excel导入 解决方案二: 可以参考这:poi的eventmodel写的大数据量的excel的读取程序.http://gaosheng08.iteye.com/blog/624

maxpermsize-求高手帮忙啊,我的服务器内存有32G,,,tomcta老是报内存溢出啊,-

问题描述 求高手帮忙啊,我的服务器内存有32G,,,tomcta老是报内存溢出啊,- 我在网上设置了这个JAVA_OPTS="-server -Xms900m -Xmx900m -XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m 可以了,但是过3个小时,又内存溢出了,不知道怎么去改啊, 解决方案 JVM:JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k" -serv

运行时报空指针异常-麻烦看下为什么运行时会报空指针异常

问题描述 麻烦看下为什么运行时会报空指针异常 public static void test() { String[] str = new String[1024]; for (int i = 0; i < 200; i++) { str[i] = "23232"; } int max = 0; for (int i = 1; i < str.length-1; i++) { if (str[i].length() > 0) max += 1; } System.ou

iOS学习笔记之内存管理及@property

iOS5之后苹果公司引入了ARC机制,大大方便了ios开发者对内存的管理机制.在iphone 4出世的时候为什么ios在512M的内存中可以运行很大的游戏,保持畅快流畅的状态.得益于ios非常好的内存处理机制.       在我们现在创建项目的时候,默认会直接引入ARC机制,我们可以关闭ARC机制:在输入框中输入long点击搜索按钮,如图:          接下来即可进行老版本的内存操作了. 在老版本中,内存操作采用了引用计数(retainCount)alloc retain(+1)relea

位图-android为啥这条语句老是报内存溢出错误?

问题描述 android为啥这条语句老是报内存溢出错误? Bitmap bm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); 就是这条语句,经常报java.lang.outofMemoryError错误?各位大牛谁知道,可以改一个其他的方法吗? 解决方案 是不是因为你的图片太大了,把它换为android自带的图标试试.或者直接使用Canvas.drawBitmap(