-(void) vCreateAddressBookAndPopulateContact
{
self.addressBook =ABAddressBookCreate();
}
+(void) vCreateAddressBookAndPopulateContact
{
[[RCABAddressBookHandler singleton] vCreateAddressBookAndPopulateContact];
//[self
}
代码是正确的。它创建了一个地址簿。当应用程序消失时,地址簿将以dealloc发布。
我确实有记忆警告,我想知道该怎么办?
这是声明属性的方式
@property (nonatomic) ABAddressBookRef addressBook;
我在dealloc当然发布了
-(void)dealloc
{
[[NSNotificationCenter defaultCenter]removeObserver:self];
CFRelease(_addressBook);
}
我们得到的警告是:
/business/Dropbox/badgers/RecentContact/RCABAddressBookHandler.m:52:1: Potential leak of an object
/business/Dropbox/badgers/RecentContact/RCABAddressBookHandler.m:51:23: Call to function 'ABAddressBookCreate' returns a Core Foundation object with a +1 retain count
/business/Dropbox/badgers/RecentContact/RCABAddressBookHandler.m:52:1: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1
答案 0 :(得分:1)
如果这是您设置_addressBook
的唯一位置,则可以使用直接访问权限分配它:
- (void)vCreateAddressBookAndPopulateContact
{
/* not thread safe */
if (NULL == _addressBook) {
_addressBook = ABAddressBookCreate();
}
}
然后将属性更改为readonly
。