iOS CGBitmapContextCreate复制数据吗?

Meg*_*anX 0 memory-leaks cgbitmapcontextcreate ios

我写了这段代码:

 bitmapData = calloc(1, bitmapByteCount );
 context = CGBitmapContextCreate (bitmapData,
                                 pixelsWide,
                                 pixelsHigh,
                                 8,
                                 bitmapBytesPerRow,
                                 colorSpace,
                                 kCGImageAlphaOnly);
Run Code Online (Sandbox Code Playgroud)

当我这样做时,CGBitmapContext是复制我的bitmapData,所以在这些行后我应该写

free(bitmapData); 
Run Code Online (Sandbox Code Playgroud)

sch*_*sch 5

如果你需要bitmapData不要释放它.如果你不需要它,请NULL作为参数传递,Quartz将自己分配内存(iOS 4.0及更高版本).

data:指向要在其中呈现图形的内存中的目标的指针.此内存块的大小应至少为(bytesPerRow*height)字节.在iOS 4.0及更高版本以及Mac OS X v10.6及更高版本中,如果希望Quartz为位图分配内存,则可以传递NULL.这使您无需管理自己的内存,从而减少内存泄漏问题.

但Quartz不会复制bitmapData,它会在那里进行渲染.释放后context你应该释放那段记忆.

编辑:在一个Apple示例项目中,内存被释放,但不是立即释放:

float drawStage3(CGContextRef context, CGRect rect)
{
    // ...
    cachedData = malloc( (((ScaledToWidth * 32) + 7) / 8) * ScaledToHeight);
    // ...
    bitmapContext = CGBitmapContextCreate(cachedData /* data */,
    // ...
    CFRelease(bitmapContext);
    // ...
    // Clean up
    CFRelease(cachedImage);
    free(cachedData);
}
Run Code Online (Sandbox Code Playgroud)