用CGBitmapContextCreate()&创建的CGContextRef;底层位图内存管理

时间:2017-06-20 16:02:19

标签: ios objective-c iphone memory-management bitmap

我正在尝试习惯iOS的CGContextRef图形上下文,但无法找到以下问题的答案。

使用CGBitmapContextCreate()创建位图上下文时,您可以选择在其NULL参数中传递预先分配的缓冲区或data。在第二种情况下:

  

如果希望此函数为位图分配内存,则传递NULL。   这使您无需管理自己的内存,从而减少内存   泄漏问题。

好的,这似乎是一种很好的采用方法。但是Apple的文档缺少的是对以下时刻的明确解释:

  • 时,如果您将data传递给NULLCGBitmapContextCreate()缓冲区会被释放吗?它是正确的,它发生在你身上 使用CGContextRelease()
  • 发布上下文
  • 相反,当您将指针传递给预先分配的缓冲区时 到CGBitmapContextCreate()是安全的,以便在调用后设想 CGContextRelease(),你仍然有效(在某些方面没有损坏 方式)缓冲区中的位图?或者您不能在CGContextRelease()调用
  • 之后使用生成的位图

有经验的人可以分享他们对此事的知识吗?

1 个答案:

答案 0 :(得分:0)

如果你没有创建缓冲区(传递NULL),当你释放上下文时它将被它的创建者释放..

如果您创建并传递缓冲区,则在释放上下文后,您将负责释放缓冲区。上下文只是写入和读取缓冲区的抽象,释放它不会影响缓冲区中的数据,您的位图数据仍然在缓冲区中。您应该能够通过从缓冲区中取出第二个位图上下文并将其保存到文件中来轻松验证这一点。