处理核心基础类时的内存管理问题

时间:2012-07-27 10:06:52

标签: ios memory addressbook

我有一个内存管理问题,我似乎无法找到解决方案。代码如下:

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

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

[self setValuesFor:person toARecord:aRecord];

return aRecord;

}

所以我将自己的类转换为ABRecordRef,现在我需要以某种方式“自动释放”这个对象(所以我可以在不同的对象中获得所有权)。我正在使用ARC而ABRecordRef无法通过桥接到Cocoa基础类。我有什么想法可以解决这个内存管理问题吗?

感谢您的帮助:)

1 个答案:

答案 0 :(得分: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];