2

我有一个创建 ABRecordRef、设置其属性并返回 ref 的方法。

我在使用 CFAutoRelease 时遇到了崩溃,因为我需要支持 iOS <7。我将如何正确发布这个?

-(ABRecordRef) myRecord{
 ABRecordRef newRecord = ABPersonCreate();
//some setting here
return CFAutoRelease(newRecord); //how to release here?
}
4

2 回答 2

4

对于 CoreFoundation 引用,我实际上不会在您的myRecord方法中发布该引用。相反,我会定义接口,以便调用者myRecord拥有引用并负责释放它。

于 2013-10-07T16:12:39.767 回答
2

您应该能够为 Core Foundation 对象构建自己的自动释放函数,如下所示:

inline CFTypeRef MyAutorelease(CFTypeRef obj) { 
    id __autoreleasing result = CFBridgingRelease(obj); 
    return (__bridge CFTypeRef)result; 
}

使用__autoreleasing,您可以强制对象最终进入自动释放池。

于 2014-05-10T08:45:19.963 回答