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

1 に答える 1

1

設定した場所がこれだけの場合は、_addressBook直接アクセスを使用して割り当てることができます。

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

次に、プロパティを に変更しますreadonly

于 2013-05-17T09:02:35.577 に答える