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 基础类。有什么想法可以解决这个内存管理问题吗?

谢谢您的帮助 :)

4

1 回答 1

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];
于 2012-08-01T13:14:27.613 回答