我想我在这里是一个骨头......
静态分析器以-(void)doSomethingInteresting
方法抱怨:
存储在myAddressBook中的对象可能泄漏
嗯,当然,这是有道理的;我正在调用create
函数而没有匹配的release
。但是,我认为我不想在myAddressBook
结束时发布-doSomethingInteresting
,因为我希望它能在AwesomeObject
实例的生命周期中保留。
AwesomeObject.h
@interface AwesomeObject : NSObject
@property (assign, nonatomic) ABAddressBookRef addressBook;
@end
AwesomeObject.m
@implementation AwesomeObject
- (void)doSomethingInteresting
{
CFErrorRef error = NULL;
ABAddressBookRef myAddressBook = ABAddressBookCreateWithOptions(NULL, &error);
[self setAddressBook:myAddressBook];
}
@end
编辑:附加屏幕截图
答案 0 :(得分:3)
分析师并不了解您希望在您的媒体资源中分配保留的地址簿,因此不会在doSomethingInteresting
结束时将其发布。
将您的财产更改为:
@property (strong, nonatomic) id addressBook;
并设置如下:
[self setAddressBook:CFBridgingRelease(addressBook)];
现在,当您想要使用addressBook
属性时,请使用(__bridge ABAddressBookRef)
强制转换。
此外,您需要发布可能在CFErrorRef
期间创建的潜在ABAddressBookCreateWithOptions
对象:
if(error)
{
CFRelease(error);
error = NULL;
}
答案 1 :(得分:0)
你需要这样称呼它:
[self setAddressBook:CFBridgingRelease(myAddressBook)];