【发布时间】:2015-06-29 03:27:36
【问题描述】:
我使用 GoldRaccoon 作为我的第三个 ftp 库。 当我下载大尺寸 (> 500MB) 文件时,我的应用会因内存压力而崩溃。
使用仪器检测我的应用程序中的内存分配的快照如下。
似乎 self.receivedData 占用了太多内存分配。 收到内存不足警告时如何处理这些分配?
【问题讨论】:
我使用 GoldRaccoon 作为我的第三个 ftp 库。 当我下载大尺寸 (> 500MB) 文件时,我的应用会因内存压力而崩溃。
使用仪器检测我的应用程序中的内存分配的快照如下。
似乎 self.receivedData 占用了太多内存分配。 收到内存不足警告时如何处理这些分配?
【问题讨论】:
我知道这很旧,但我只是在处理完全相同的事情,我相信其他人也是如此。很容易修复,不知道为什么一开始没有这样实现。
在 GRRequestsManager.m 中,将此方法替换为 this。
- (void)dataAvailable:(NSData *)data forRequest:(id<GRDataExchangeRequestProtocol>)request
{
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:[request localFilePath]])
{
[data writeToFile:[request localFilePath] atomically:YES];
}
else
{
NSFileHandle *handle = [NSFileHandle fileHandleForUpdatingAtPath:[request localFilePath]];
[handle seekToEndOfFile];
[handle writeData:data];
[handle closeFile];
}
}
然后在 - (void)requestCompleted:(GRRequest *)request 方法中,删除下载部分中的写入文件。就是这样,现在不是将文件存储在 NSData 中并在最后写入,它只是不断地将数据添加到文件中。我没有花时间让它漂亮或处理写入错误,但它确实有效。
【讨论】: