gpt4 book ai didi

objective-c - ARC 占用大量内存

转载 作者:行者123 更新时间:2023-12-02 00:06:41 24 4
gpt4 key购买 nike

我正在开发的应用程序使用 ARC。我希望它能够处理大文件,因此我不是加载整个文件,而是使用 NSFileHandle readDataOfLength 方法加载数据 block 。它发生在一个循环内,该循环会重复直到处理整个文件:

- (NSString*)doStuff { // called with NSInvocationOperation

// now we open the file itself

NSFileHandle *fileHandle =
[NSFileHandle fileHandleForReadingFromURL:self.path
error:nil];

...

BOOL done = NO;
while(!done) {

NSData *fileData = [fileHandle readDataOfLength: CHUNK_SIZE];

...

if ( [fileData length] == 0 ) done = YES;

...

}

...

}

根据分析器,没有内存泄漏;但是,我的应用程序在处理文件时会占用大量内存。我的猜测 - 自动释放仅在我处理文件后才会出现。我可以在不切换到手动内存管理的情况下修复它吗?

最佳答案

使用自动释放池将代码包装在该循环内。

while(!done) 
{
@autoreleasepool
{
NSData *fileData = [fileHandle readDataOfLength: CHUNK_SIZE];
...
if ( [fileData length] == 0 )
{
done = YES;
}
...
}
};

readDataOfLength 重新调整自动释放的数据,并且由于您坚持在该循环及其方法中,因此在循环和封装方法完成之前,自动释放的数据不会被释放。

关于objective-c - ARC 占用大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10989164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com