我有一款應用程序,可在iOS 7及更高版本上使用NSURLSession
下載文件。我開始的任務是這樣的:NSURLSession下載任務通過默認會話配置調試時增加內存
//property declared: @property (retain) NSURLSession *session;
NSString *addr = @"http://www.example.com/path/to/nontrivial/file.dat";
NSURL *url = [NSURL URLWithString:addr];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
self.session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
[[self.session downloadTaskWithRequest:request] resume];
在完成處理器(URLSession:downloadTask:didFinishDownloadingToURL:
),我將文件移動到我的應用程序數據文件夾,並在會議上呼籲invalidateAndCancel
。在進度處理程序(didWriteData:totalBytesWritten:totalBytesExpectedToWrite:
)中,我只記錄進度。
由於這是在調試中運行,所以內存使用量迅速增加,達到下載數據量的幾倍。但是,如果我在後臺任務中執行此操作,則內存使用量將保持不變。
對下載任務使用默認會話配置不好嗎?是否有某種緩存屬性,我應該設置?這裏發生了什麼?
更新:據我所知,這隻發生在調試器連接時。當我在沒有調試器的模擬器中啓動它時,Activity Monitor中看不到任何內存使用量增加。
更新2:這似乎已在iOS 8.3中修復。好極了!
我面臨同樣的問題。我深入研究了一下,發現內存使用情況(通過在設備上調用host_statistics報告)實際上並沒有增加。看來,無論是向Xcode /報告內存使用情況,還是負責處理內存消耗的進程都會中斷。 – Ahti 2015-02-05 17:33:31
@Ahti - 真棒。時間提交雷達。 – 2015-02-05 17:35:27