不,您不需要调用返回CGImageRelease()
的便捷方法,例如or 。不幸的是,目前,这些方法的文档和头文件并没有说明这一点。CGImageRef
ALAssetRepresentation
fullResolutionImage
fullScreenImage
如果您CGImageRef
使用其中一个CGImageCreate*()
功能自己创建了一个,那么您拥有它并负责使用CGImageRelease()
. 相比之下,返回的sCGImageRef
似乎是“自动释放的”,因为您不拥有这些方法返回的图像引用。例如,假设您在代码中尝试这样的事情:fullResolutionImage
fullScreenImage
CGImageRef newImage = [assetRep fullResolutionImage];
...
UIImage *cloudImage = [UIImage imageWithCGImage:newImage
scale:scale orientation:orientation];
CGImageRelease(newImage);
如果您运行静态分析器,它将对该CGImageRelease(newImage);
行发出以下警告:
调用者此时不拥有的对象的引用计数不正确递减
请注意,无论您的项目设置为使用手动引用计数还是 ARC,您都会收到此警告。
相比之下,例如,CGImage
方法的文档使返回的自动释放这一事实更加清楚:NSBitmapImageRep
CGImageRef
CG图像
从接收器的当前位图数据返回一个 Core Graphics 图像对象。
- (CGImageRef)CGImage
返回值
CGImageRef
根据接收者的当前位图数据返回一个自动释放的不透明类型。