ARC ベースのプロジェクトから、ARC に準拠していないライブラリを使用しています。そのライブラリ内の関数は、保持されたUIImage *オブジェクトを返します。返されたオブジェクトの保持カウントを管理できるように、属性を使用し__bridgeて ARC にこれを知らせる方法はありますか? 私は試した:
UIImage *returnedImage;
returnedImage = (__bridge_transfer UIImage *)functionThatReturnsAUIImage();
UIImage *しかし、それは私が aにキャストすることを許可しませんUIImage *)。私も試しました:
returnedImage = (UIImage *)(__bridge_transfer void *)functionThatReturnsAUIImage();
これもうまくいきませんでした。コンパイラは__bridge_retainedの代わりに を提案しまし__bridge_transferたが、私が望んでいたこととは逆のことをしたと思います (つまり、返されたUIImageオブジェクトの保持カウントを増やしていたでしょう)。
C関数が自動解放されたオブジェクトを返すようにするのが適切だと思います。私が知る限り、ARC は、オブジェクトを返す C 関数はすべて、自動解放されたオブジェクトを返すと想定しています。このライブラリのソースにアクセスできるので、これを行うことができますが、ライブラリを変更できなかった場合に呼び出し側から使用できる解決策があるかどうか疑問に思っていました.