2012-07-27 44 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];