我使用GoldRaccoon作为我的第3个ftp库。 当我下载大尺寸(> 500MB)文件时,我的应用程序会因内存压力而崩溃。
下面的快照,使用仪器检测我的应用程序中的内存分配。
似乎self.receivedData需要太多的内存分配。 获取低内存警告时如何处理这些分配?
答案 0 :(得分:0)
我知道这已经老了,但我只是在处理完全相同的事情而且我确定别人也是。它很容易修复,不知道为什么它首先没有像这样实现。
在GRRequestsManager.m中,将此方法替换为此。
- (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 *)请求方法中,删除下载部分中的写入文件。就是这样,现在不是将文件存储在NSData中并在最后写入,而是继续将数据添加到文件中。我没有花时间使它漂亮或处理写错误,但它的工作原理。