我是一名新手,对于LLVM和Objective-C中的自动引用计数(ARC)还不熟悉,并且关于从我的Objective-C函数返回CGImageRefs有一个问题。在手动引用计数的时代,我们可以将CGImageRef简单地转换为
这是我在禁用ARC时所能做的:
所以,我想创建一种方法,使用ARC返回一个不由调用者拥有的CGImageRef。如果有更好的方法来完成同样的事情,我非常乐意听取建议。我知道UIImage使用CGImage属性做了类似的事情。
编辑:虽然为特定文件禁用ARC是实现此目的的有效方法,但我更喜欢在整个代码中使用纯ARC。这在与他人分享特定文件的特定代码时非常方便,因为他们不需要更改任何给定文件的构建设置。为了利用ARC系统自动释放CFTypeRef,可以执行以下操作:
id
,将其autorelease,然后返回原始的CGImageRef。但是在ARC中,虽然我们知道可以直接让ARC系统对可保留对象进行autorelease并返回,但我没有找到对CFTypeRefs实现这种方式的方法。这是我在禁用ARC时所能做的:
- (CGImageRef)image {
CGImageRef myImage;
id myImageID = (id)myImage;
[myImageID autorelease];
return myImage;
}
所以,我想创建一种方法,使用ARC返回一个不由调用者拥有的CGImageRef。如果有更好的方法来完成同样的事情,我非常乐意听取建议。我知道UIImage使用CGImage属性做了类似的事情。
编辑:虽然为特定文件禁用ARC是实现此目的的有效方法,但我更喜欢在整个代码中使用纯ARC。这在与他人分享特定文件的特定代码时非常方便,因为他们不需要更改任何给定文件的构建设置。为了利用ARC系统自动释放CFTypeRef,可以执行以下操作:
__attribute__((ns_returns_autoreleased))
id CGImageReturnAutoreleased (CGImageRef original) {
// CGImageRetain(original);
return (__bridge id)original;
}
然后只需执行 return (__bridge CGImageRef)CGImageReturnAutoreleased(myImage)
来返回一个自动释放的图像。