2016-04-05 7 views
3

スタティックアナライザを使用しているときにコードを実行しようとしていますが、メモリリークが報告されています。 __bridge_transferを使用した「encodedDataobejective c - 格納されているオブジェクトのポータルリーク

return encodedData; 

Check image here

+0

__bridge_transfer –

+0

再生いただきありがとうございます。 –

+0

autoreleaseを使用してください。コンパイラはreturn文の後で自動的に解放します。 –

答えて

4

使用__bridge_transfer

に格納されたオブジェクトの潜在的なリークなど、このライン上にARCは、あなたのためのオブジェクトを解放するようになります。 __bridge_transferを指定しない場合は、返されたオブジェクトを手動で解放する必要があります。

1

__bridge,__bridge_transferキーワードは、非目的のポインタを扱う方法をARCシステムに伝えるために使用されます。本質的には、__bridgeを使用すると、変換されたポインタの所有権を扱わないようにARCに指示します。なぜなら、目的コード以外のコードから解放するからです。おそらくfree()またはCFRelease ... type関数です。一方、__bridge_transferは、所有権をARCに転送し、ARCは、そのオブジェクトへの参照がゼロになると、標準リリースメカニズムを介して、オブジェクトC(したがって、オリジナルの非オブジェクトC)オブジェクトも解放します。

Reference

0

問題は、CoreFoundationのメソッドを使用して文字列を作成することです。そして、デフォルトでは、ARCはそれをどうしたらいいのか分かりません。したがって、作成したオブジェクトのメモリを手動で管理する(たとえば、CFReleaseを使用)か、ARCに渡します。

後で、私は、あなたの場合に行く方法と思います。 __bridge_transferを使用して、他の人が既に述べたように、それを行うことができます。

関連する問題