2012-02-07 62 views
1

我使用NSFileHandle讀取來自套接字的數據的數量。 這是我正在創建的filehandle「readInBackgroundAndNotify」增加保留接收機

文件句柄= [[NSFileHandle的alloc] initWithFileDescriptor:襪 closeOnDealloc:YES];

我這樣做:

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

我注意到,readInBackgroundAndNotify增加的retainCountfileHandle 1。因此,當我發佈這個filehandle一旦我做了讀取數據時,內存不釋放。因此它試圖閱讀一些無效的數據和應用程序崩潰。請注意,這個問題在的iOS 4.3中發生而不是在IOS 5 我釋放filehandle之前刪除的觀察者。在釋放文件句柄對象之前還有什麼我應該做的嗎?

回答

1

我注意到,readInBackgroundAndNotify由1

增加文件句柄的retainCount 因爲它可能應該作爲一個實現細節的一部分......你問的filehandle實際上成爲計劃的背景,使得如果數據到達時,將通知。

請注意retainCount是無用的;在這種情況下它可能會增加5或42。這是無關緊要的。底線是您要求它在後臺執行某些操作,直到達到「停止執行後臺操作」狀態,該對象可能仍然存在。

因此,當我完成讀取數據後釋放此文件句柄, 內存不會釋放。

你告訴文件句柄停止閱讀的背景是什麼?也許close荷蘭國際集團呢?如果不是,它可能會繼續。

iOS 4和5之間的區別在於,可能存在邏輯,文件句柄指出沒有更多的觀察者,因此會自動停止閱讀。再一次,你不應該指望的實現細節。

+0

我不知道我如何要求文件句柄停止在後臺閱讀。我試圖在釋放它之前關閉文件句柄。雖然沒用。 – 2012-02-08 05:56:08