の方法でCFRelease((CFStreamRef)inputStream);
とCFRelease((CFStreamRef)outputStream);
を追加します。
CFStreamCreatePairWithSocketToHost
戻り、readStream
とwriteStream
の所有権があなたに渡されます。この行を変更し、代わりに
The compiler does not automatically manage the lifetimes of Core Foundation objects; you
must call CFRetain and CFRelease (or the corresponding type-specific variants) as dictated
by the Core Foundation memory management rules (see Memory Management Programming Guide
for Core Foundation).
:ARCを使用した場合
Ownership follows the Create Rule in Memory Management Programming Guide for Core Foundation.
Core Foundationのオブジェクトを明示的にも解放する必要があります(対応するoutputStream
の行):
inputStream = (__bridge NSInputStream *)readStream;
:readStreamは、ARCは認識していない優れた保持カウントを持っているので、
inputStream = (__bridge_transfer NSInputStream *)readStream;
はこれがあります。 ARCにこのポインタの所有権を与えることで、適切な時点でポインタを解放する権限をARCに与えています。さらに読む:1、2
私は自分のプロジェクトで自動参照カウントを使用しているので、私はリリースを使用できません。それは私のために自動的に行われますか? –
私の更新を確認してください – Mar0ux
それは働いた!メモリリークはもう発生しません。あなたの答えはNSStringの代わりにNSInputStreamを意味すると思いますか? –