ios - 截图和内存管理

时间:2014-07-02 09:09:59

标签: ios memory-management uiimage cgimage

我正在使用Cocos3D构建一个需要相对大量屏幕截图的应用程序:

imgRef = tmpDrawingVisitor.renderSurface.createCGImage;

    paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    docDir = [paths objectAtIndex:0];
    imgPath = [docDir stringByAppendingPathComponent: [[NSProcessInfo processInfo] globallyUniqueString]];

    _flippingpath = [imgPath stringByAppendingPathExtension:@"png"];
    //UIImage* uiImg= [UIImage imageWithCGImage: imgRef];
    uiImgprep= [UIImage imageWithCGImage: imgRef];
    //UIImage* uiImg= [UIImage imageWithCGImage: imgRef scale:0.5 orientation: UIImageOrientationUp];
    uiImg = [self imageWithImage:uiImgprep scaledToSize:CGSizeMake(512.0, 384.0)];
    imgData = UIImagePNGRepresentation(uiImg);
    [imgData writeToFile: _flippingpath atomically: YES];

我所做的是截取屏幕截图并将其保存到Document文件夹。之后,在CCSprite中将其映射为动画,就像书籍翻转一样。

代码工作正常,但内存累计累加(每次大约12 Mb),直到点内存都会超载。

在这种情况下如何管理内存?我正在开发IOS 7.1.1,它已经是ARC。

1 个答案:

答案 0 :(得分:0)

我不知道我是否正确理解你的应用程序的功能,但是如果我这样做,你是否考虑过只保留当前页面,前一页和下一页的屏幕截图,因为那些是你唯一的需要。

你只能在内存中有三张图片:

  • 电流

向前翻转时,您可以释放前一个然后上一个=当前,然后分配下一个。 向后翻转时,您可以释放下一个,然后下一个=当前,然后分配前一个。

由于您使用ARC,要释放图像,只需确保没有强烈的指针引用即可。

我了解你的问题吗?