我有一个创建 ABRecordRef、设置其属性并返回 ref 的方法。
我在使用 CFAutoRelease 时遇到了崩溃,因为我需要支持 iOS <7。我将如何正确发布这个?
-(ABRecordRef) myRecord{
ABRecordRef newRecord = ABPersonCreate();
//some setting here
return CFAutoRelease(newRecord); //how to release here?
}
我有一个创建 ABRecordRef、设置其属性并返回 ref 的方法。
我在使用 CFAutoRelease 时遇到了崩溃,因为我需要支持 iOS <7。我将如何正确发布这个?
-(ABRecordRef) myRecord{
ABRecordRef newRecord = ABPersonCreate();
//some setting here
return CFAutoRelease(newRecord); //how to release here?
}
对于 CoreFoundation 引用,我实际上不会在您的myRecord
方法中发布该引用。相反,我会定义接口,以便调用者myRecord
拥有引用并负责释放它。
您应该能够为 Core Foundation 对象构建自己的自动释放函数,如下所示:
inline CFTypeRef MyAutorelease(CFTypeRef obj) {
id __autoreleasing result = CFBridgingRelease(obj);
return (__bridge CFTypeRef)result;
}
使用__autoreleasing
,您可以强制对象最终进入自动释放池。