2012-07-27 92 views
1

我有一個內存管理問題,我似乎無法找到解決方案。其代碼如下:處理核心基礎類時的內存管理問題

-(ABRecordRef)convertABCPerson:(ABCPerson*) person{ 

// create new address book person record 
ABRecordRef aRecord = ABPersonCreate(); 

[self setValuesFor:person toARecord:aRecord]; 

return aRecord; 

}

所以我在我自己的類轉換成ABRecordRef,現在我需要以某種方式爲「自動釋放」這個對象(這樣我就可以在不同的對象的所有權)。我正在使用ARC,並且ABRecordRef無法被收費橋接到Cocoa基礎類。任何想法如何我可以解決這個內存管理問題?

感謝您的幫助:)

+0

後回答自己的問題,接受它,否則這會停留在未答覆的名單。 – coverback 2012-07-27 11:18:49

回答

3

我找到了解決我的問題。我唯一需要做的就是將其轉換爲id並使用橋接轉移讓ARC處理內存管理。從另一個類中,可以將ABRecordRef強制轉換爲__bridge,以便ARC正確處理記錄。

解決辦法:

-(id)convertABCPerson:(ABCPerson*) person{ 

    // create new address book person record 
    ABRecordRef aRecord = ABPersonCreate(); 

    [self setValuesFor:person toARecord:aRecord]; 

    id record = (__bridge_transfer id)aRecord; 

    return record; 
} 

鑄造回:

personViewController.displayedPerson = (__bridge ABRecordRef)[[ABCFacade sharedABCFacade] convertABCPerson:goldenRecord];