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にメモリ管理を処理させることです。他のクラスから、ARCがレコードを正しく処理するように__bridgeとしてABRecordRefキャストを実行できます。

ソリューション:

-(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 に答える