2016-12-07 14 views
0

私はプロジェクトをビルドしようとしていますが、objc_retainedObject()という新しいエラーがあります。エラーobjc_retainedObject()を使用できません

エラーメッセージobjc_retianedObject is unavailable: use CFBridgingRelease() or a (__bridge_transfer id) cast insteadがあります。

私はobjc_retainedObject()の使用をCFBridgingReleaseに置き換えました。エラーはなく、アプリケーションを実行できますが、アプリケーションがQRコードスキャンビューを表示すると、メッセージなしでクラッシュしました。

解決策になっていた#define objc_retainedObject(o) ((__bridge_transfer id)(objc_objectptr_t)(o))を入れても同じです。 私はそれがXCodeの設定かライブラリの問題がないと考えています。何か案は?

答えて

2

objc_retainedObjectを再作成しないでください。それは意図的に削除されました。 CFBridgingReleaseおよびCFBridgingRetainは、CFオブジェクトをARCに移動するための正しいツールです。 (__bridgeは、オブジェクトを格納していないためにARCに転送する必要のないCFオブジェクトを扱うツールです)。

プログラムがクラッシュしていると、おそらくメモリが正しく管理されていません。 objc_retainedObjectが間違っていた可能性があります(あなたがそれを忘れてしまったとしても)。 CFオブジェクトをARCに転送するときの正しいメモリ管理については、when should you use __bridge vs. CFBridgingRelease/CFBridgingRetain?を参照してください。

コードについて詳しく知りませんが、どこで間違いを犯したのか正確には推測できませんが、Create Ruleで取得しなかったオブジェクトでCFBridgingReleaseと呼んでいる可能性があります。遭遇するすべてのCFオブジェクトにCFBridgingReleaseを投げるだけではありません。あなたは、既存の保持をバランスさせていることを確認する必要があります。

関連する問題