在这种情况下如何进行静默内存泄漏警告

时间:2013-05-17 08:46:27

标签: objective-c

-(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

1 个答案:

答案 0 :(得分:1)

如果这是您设置_addressBook的唯一位置,则可以使用直接访问权限分配它:

- (void)vCreateAddressBookAndPopulateContact
{
    /* not thread safe */
    if (NULL == _addressBook) {
        _addressBook = ABAddressBookCreate();
    }
}

然后将属性更改为readonly

相关问题