如题,有没有人遇到过

解决方案 »

  1.   

    情况是这样的 ,我需要实时截取设备屏幕,将图片发给服务器,然而持续截屏发送导致内存不断增长,一会会就会涨到几百兆,贴上代码,求大神指教
    //这是截取屏幕图片并处理后转成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;
    }
      

  2.   

    这段代码没用,关键是getScreenImageDataWithIsBigImage你通过这个方法获取到截图后怎么处理的,上传服务器后要及时释放这个图片,另外内存释放是有一些延时的.通过instruments查看的话会有很明显的延时
      

  3.   

    主线程还是子线程
    debug还是release
      

  4.   


    我也遇到了这个问题:我的处理方式是:1、不是每帧都都截屏,设置每3秒(或者每80帧)截取一张图片;
    2、截取的面积尽量小,而不是截全屏,转成`UIImage`之后,压缩处理;
    测试结果,
    在5C上,CPU使用率40%左右,
    在8P上,CPU使用率80%左右,
    在X上,CPU使用率70%左右,