スタティックアナライザを使用しているときにコードを実行しようとしていますが、メモリリークが報告されています。 __bridge_transfer
を使用した「encodedData
」obejective c - 格納されているオブジェクトのポータルリーク
return encodedData;
スタティックアナライザを使用しているときにコードを実行しようとしていますが、メモリリークが報告されています。 __bridge_transfer
を使用した「encodedData
」obejective c - 格納されているオブジェクトのポータルリーク
return encodedData;
使用__bridge_transfer
に格納されたオブジェクトの潜在的なリークなど、このライン上にARCは、あなたのためのオブジェクトを解放するようになります。 __bridge_transferを指定しない場合は、返されたオブジェクトを手動で解放する必要があります。
__bridge
,__bridge_transfer
キーワードは、非目的のポインタを扱う方法をARCシステムに伝えるために使用されます。本質的には、__bridge
を使用すると、変換されたポインタの所有権を扱わないようにARCに指示します。なぜなら、目的コード以外のコードから解放するからです。おそらくfree()
またはCFRelease
... type関数です。一方、__bridge_transfer
は、所有権をARCに転送し、ARCは、そのオブジェクトへの参照がゼロになると、標準リリースメカニズムを介して、オブジェクトC(したがって、オリジナルの非オブジェクトC)オブジェクトも解放します。
問題は、CoreFoundationのメソッドを使用して文字列を作成することです。そして、デフォルトでは、ARCはそれをどうしたらいいのか分かりません。したがって、作成したオブジェクトのメモリを手動で管理する(たとえば、CFRelease
を使用)か、ARCに渡します。
後で、私は、あなたの場合に行く方法と思います。 __bridge_transfer
を使用して、他の人が既に述べたように、それを行うことができます。
__bridge_transfer –
再生いただきありがとうございます。 –
autoreleaseを使用してください。コンパイラはreturn文の後で自動的に解放します。 –