小编Dav*_*rri的帖子

CGImage会产生大量脏内存,导致应用程序崩溃

我尝试通过填写自己的数据来创建UIImage.到目前为止一切正常.但是,如果我尝试多次调用此函数,它似乎会填满内存,直到应用程序崩溃.使用VM Tracker我发现脏内存增长到328MB,当应用程序崩溃时,290MB是CG图像内存.

我多次调用我的函数循环,从而启用ARC.图像非常大,但这应该不是问题,因为它适用于29次迭代.据我所知,脏内存应该再次被应用程序重用.是对的吗?那么为什么它会填满我的记忆呢?我该如何避免这个问题呢?

for(int i = 0; i < 1000; ++i) {
    UIImage *img = [self createDummyImage:CGSizeMake(2000, 1600)];
}
Run Code Online (Sandbox Code Playgroud)

创建虚拟UIImage的功能:

- (UIImage*)createDummyImage:(CGSize)size
{
    unsigned char *rawData = (unsigned char*)malloc(size.width*size.height*4);

    // fill in rawData (logic to create checkerboard)

    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
    CGBitmapInfo bitmapInfo = kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Host;
    CGContextRef contextRef = CGBitmapContextCreate(rawData, size.width, size.height, 8, 4*size.width, colorSpaceRef, bitmapInfo);
    CGImageRef imageRef = CGBitmapContextCreateImage(contextRef);

    CGColorSpaceRelease(colorSpaceRef);
    CGContextRelease(contextRef);
    free(rawData);

    UIImage *image = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);

    return image;
}
Run Code Online (Sandbox Code Playgroud)

hooleyhoop的工作解决方案

将函数调用放入自动释放池中.

for (int i = 0; …
Run Code Online (Sandbox Code Playgroud)

iphone memory-management cgimage ios5

4
推荐指数
1
解决办法
1576
查看次数

标签 统计

cgimage ×1

ios5 ×1

iphone ×1

memory-management ×1