iOS6上的CFAutoRelease()类行为
我有一个方法创build一个ABRecordRef,设置其属性并返回参考。
我在使用CFAutoRelease时遇到崩溃,因为我需要支持iOS <7。 我将如何正确地释放这个?
-(ABRecordRef) myRecord{ ABRecordRef newRecord = ABPersonCreate(); //some setting here return CFAutoRelease(newRecord); //how to release here? }
对于CoreFoundation引用,我实际上不会在您的myRecord
方法中释放该引用。 相反,我会定义接口,使myRecord
的调用者拥有引用,并负责释放它。
你应该能够像这样为Core Foundation对象构build自己的autorelease函数:
inline CFTypeRef MyAutorelease(CFTypeRef obj) { id __autoreleasing result = CFBridgingRelease(obj); return (__bridge CFTypeRef)result; }
用__autoreleasing
,你强制对象在autorelease池中结束。