使用GoldRaccoon(ftp库)下载大型文件时的内存压力

时间:2015-06-29 03:27:36

标签: ios download ftp

我使用GoldRaccoon作为我的第3个ftp库。 当我下载大尺寸(> 500MB)文件时,我的应用程序会因内存压力而崩溃。

下面的快照,使用仪器检测我的应用程序中的内存分配。

enter image description here

enter image description here

似乎self.receivedData需要太多的内存分配。 获取低内存警告时如何处理这些分配?

1 个答案:

答案 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中并在最后写入,而是继续将数据添加到文件中。我没有花时间使它漂亮或处理写错误,但它的工作原理。