Ios Filehandle类将整个文件加载到内存中

Ios Filehandle类将整个文件加载到内存中,ios,swift,Ios,Swift,我试图按顺序从大文件中读取数据。由于文件可能比可用内存大,我不希望文件完全加载到内存中 类记录导入器{ func`import`(url:url){ guard let reader=RecordReader(url:url)else{return} 个人简历(发件人:读者) } 私人func简历(来自读卡器:RecordReader){ 而let=reader.nextData(){ } //这里的检查内存大约是300Mb,即测试文件大小。 返回 } } 类记录读取器{ 私有变量fi

我试图按顺序从大文件中读取数据。由于文件可能比可用内存大,我不希望文件完全加载到内存中

类记录导入器{
func`import`(url:url){
guard let reader=RecordReader(url:url)else{return}
个人简历(发件人:读者)
}    
私人func简历(来自读卡器:RecordReader){
而let=reader.nextData(){
}
//这里的检查内存大约是300Mb,即测试文件大小。
返回
}
}
类记录读取器{
私有变量fileHandle:fileHandle
初始化?(url:url){
做{
self.fileHandle=try fileHandle(forReadingFrom:url)
}
抓住{
归零
}
}
func nextData()->数据{
让data=self.fileHandle.readData(长度:10000)
guard!data.isEmpty else{return nil}
返回数据
}
}
while循环完成后,内存大约为300Mb,尽管我正在读取10Kb的数据块

由于某些原因,块没有被释放


知道会发生什么吗?

在将数据打包到自动释放池之前,我已经尝试过,比如:


func nextData()->数据?{
让数据=自动释放池{
让data=self.fileHandle.readData(长度:10000)
guard!data.isEmpty else{return nil}
返回数据
}
返回数据
} 
}              
我没有意识到的是,阅读是一种需要在里面的行为:

autoreleasepool{
而let data=reader.nextData(){
打印(数据计数)
}              
}

这是正确的。感谢Martin的提示。

您可能应该阅读本地自动释放池中的每个区块可能的副本。