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