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)
如果你需要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)
归档时间: |
|
查看次数: |
1668 次 |
最近记录: |