大神请进!iOS持续截屏导致内存增长怎么搞? 如题,有没有人遇到过 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 情况是这样的 ,我需要实时截取设备屏幕,将图片发给服务器,然而持续截屏发送导致内存不断增长,一会会就会涨到几百兆,贴上代码,求大神指教//这是截取屏幕图片并处理后转成data-(NSData *)getScreenImageDataWithIsBigImage:(NSString*)imageType{ @autoreleasepool { NSData *imageData = nil; UIImage *originalImage = [SDScreenshotCapture imageWithScreenShot]; //处理图片 UIImage * bigImage = [UIImage compressImage:originalImage toTargetWidth:800 IsOriginalSize:YES Scale:0.5]; UIImage * smallImage = [UIImage compressImage:originalImage toTargetWidth:500 IsOriginalSize:NO Scale:0.3]; if ([imageType isEqualToString:@"1"]) { imageData = UIImageJPEGRepresentation(bigImage, 0.5); } else{ imageData = UIImageJPEGRepresentation(smallImage, 0.5); } return imageData; }}//这是截取屏幕+ (UIImage *)imageWithScreenShot{ UIWindow *screenWindow = [[UIApplication sharedApplication] keyWindow]; UIGraphicsBeginImageContextWithOptions(screenWindow.frame.size, NO, 0); CGContextRef context = UIGraphicsGetCurrentContext(); if ([screenWindow respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) { [screenWindow drawViewHierarchyInRect:screenWindow.bounds afterScreenUpdates:NO]; } else { [screenWindow.layer renderInContext:context]; } UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); CGContextRelease(context); UIGraphicsEndImageContext(); return image;} 这段代码没用,关键是getScreenImageDataWithIsBigImage你通过这个方法获取到截图后怎么处理的,上传服务器后要及时释放这个图片,另外内存释放是有一些延时的.通过instruments查看的话会有很明显的延时 主线程还是子线程debug还是release 我也遇到了这个问题:我的处理方式是:1、不是每帧都都截屏,设置每3秒(或者每80帧)截取一张图片;2、截取的面积尽量小,而不是截全屏,转成`UIImage`之后,压缩处理;测试结果,在5C上,CPU使用率40%左右,在8P上,CPU使用率80%左右,在X上,CPU使用率70%左右, 苹果开发可视化编程与之前的VS。NET 为何不同的呢? ios有没有全局宏,或者在工程属性里设置宏? 求xp系统下装苹果系统 iOS 切换视图,求助!!! 请问如何实现一个画面加载多个不相关的CCTableView AFN往服务器请求新数据,如果没有新数据,程序就崩掉了 qq音乐歌曲的缓冲是怎么实现的 如何系统深入地学习网络和线程这两个大的技术点? 怎么获取局域网内airplay设备的ip地址 iOS怎么监听应用外的截屏通知 在pickerView中选择省市区三级联动的时候如何防止数组越界? iOS能不能屏蔽控制台打印信息
//这是截取屏幕图片并处理后转成data
-(NSData *)getScreenImageDataWithIsBigImage:(NSString*)imageType{
@autoreleasepool {
NSData *imageData = nil;
UIImage *originalImage = [SDScreenshotCapture imageWithScreenShot];
//处理图片
UIImage * bigImage = [UIImage compressImage:originalImage toTargetWidth:800 IsOriginalSize:YES Scale:0.5];
UIImage * smallImage = [UIImage compressImage:originalImage toTargetWidth:500 IsOriginalSize:NO Scale:0.3];
if ([imageType isEqualToString:@"1"]) {
imageData = UIImageJPEGRepresentation(bigImage, 0.5);
}
else{
imageData = UIImageJPEGRepresentation(smallImage, 0.5);
}
return imageData;
}
}
//这是截取屏幕
+ (UIImage *)imageWithScreenShot
{
UIWindow *screenWindow = [[UIApplication sharedApplication] keyWindow];
UIGraphicsBeginImageContextWithOptions(screenWindow.frame.size, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
if ([screenWindow respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
[screenWindow drawViewHierarchyInRect:screenWindow.bounds afterScreenUpdates:NO];
} else {
[screenWindow.layer renderInContext:context];
}
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
CGContextRelease(context);
UIGraphicsEndImageContext();
return image;
}
debug还是release
我也遇到了这个问题:我的处理方式是:1、不是每帧都都截屏,设置每3秒(或者每80帧)截取一张图片;
2、截取的面积尽量小,而不是截全屏,转成`UIImage`之后,压缩处理;
测试结果,
在5C上,CPU使用率40%左右,
在8P上,CPU使用率80%左右,
在X上,CPU使用率70%左右,