2012-02-07 5 views
1

NSFileHandleを使用してソケットからデータを読み取ります。"readInBackgroundAndNotify"は受信者の保持カウントを増加させます

ファイルハンドル= [[NSFileHandleのalloc] initWithFileDescriptor: closeOnDeallocを靴下:YES] これは私がfilehandleを作成しています方法です。

私はこれやっている:私はreadInBackgroundAndNotifyは、私がデータを読み終わっていたら、私はこのfilehandleを離すと、メモリがないしたがって1でfileHandleretainCountが増加している、ということに気づく

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(readData:) name:nil object:filehandle]; 
[filehandle readInBackgroundAndNotify]; 

をリリースされました。したがって、いくつかの無効なデータを読み込もうとしていて、アプリケーションがクラッシュしています。この問題はios 4.3では発生していますが、ios 5では発生していないことに注意してください。 filehandleをリリースする前にオブザーバーを削除しています。ファイルハンドルオブジェクトを解放する前に何かすべきことはありますか?

答えて

1

は、私はそれはおそらく実装の詳細の一部として...あなたが効果的であることをfilehandleを求めている必要があるとして、readInBackgroundAndNotifyは1

によってファイルハンドルのretainCount が増加していることに気付きますバックグラウンドでスケジュールされ、データが到着すると通知されます。

retainCountは役に立たないことに注意してください。このような状況では、5または42が増加している可能性があります。それは無関係です。一番下の行は、バックグラウンドで何かをするように求めていることです。「バックグラウンドで作業をやめる」状態になるまで、オブジェクトはまだ生きている可能性があります。

したがって、データの読み取りが完了したらこのファイルハンドルを解放すると、 メモリは解放されません。

あなたがバックグラウンドで読み取りを停止するためにファイルハンドルを語ったことがありますか?おそらくcloseによってそれは?もしそうでなければ、それは続行する可能性があります。

IOSの4と5との間の差は、ファイルハンドルがもはや観察者がないと、このようにして、自動的に読み取りを停止することを指摘する論理が存在する可能性があることです。繰り返しますが、実装の詳細は数えないはずです。

+0

バックグラウンドでの読み取りを中止するようにファイルハンドルをどのように頼んでいるのか分かりません。私はそれを解放する前に、ファイルハンドルを閉じてみました。しかし、使用はありません。 –

関連する問題