用ARC管理CGImageRef
的内存的规则是什么?也就是说,有人可以帮助我提供正确的文档吗?
我正在从照片库获取图像并创建一个UIImage
来显示:
CGImageRef newImage = [assetRep fullResolutionImage];
...
UIImage *cloudImage = [UIImage imageWithCGImage:newImage scale:scale orientation:orientation];
我需要做
CGImageRelease(newImage)
吗?我收到内存警告,但这似乎不是我尚未释放的对象的逐步积累,并且我看不到Instruments有任何泄漏。我很困惑。
最佳答案
不,您不需要在CGImageRelease()
的便捷方法(如CGImageRef
或ALAssetRepresentation
)返回的fullResolutionImage
上调用fullScreenImage
。不幸的是,目前,这些方法的文档和头文件还不清楚。
如果您使用CGImageRef
函数之一自己创建了CGImageCreate*()
,则您拥有它,并负责使用CGImageRelease()
释放该图像引用。相反,从CGImageRef
和fullResolutionImage
返回的fullScreenImage
似乎是“自动释放”的,因为您不拥有这些方法返回的图像ref。例如,假设您尝试在代码中执行以下操作:
CGImageRef newImage = [assetRep fullResolutionImage];
...
UIImage *cloudImage = [UIImage imageWithCGImage:newImage
scale:scale orientation:orientation];
CGImageRelease(newImage);
如果运行静态分析器,它将对
CGImageRelease(newImage);
行发出以下警告:不正确的对象引用计数递减不正确
此时 call 者拥有的
请注意,无论您的项目设置为使用“手动引用计数”还是ARC,您都将收到此警告。
相反,例如
CGImage
的 NSBitmapImageRep
方法的文档使返回的CGImageRef
自动发布这一事实更加清楚:CGImage
返回接收者的Core Graphics图像对象
当前的位图数据。
- (CGImageRef)CGImage
返回值
根据接收者的返回一个自动释放的
CGImageRef
不透明类型当前的位图数据。
关于ios - 管理CGImageRef内存的规则?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16090708/