我的应用有时会读取数据,使用它,然后可能需要稍后再次阅读。我注意到,如果我在数据被释放后读取数据,但如果我再次阅读它,它就永远不会被释放。
为什么再次阅读时数据不会被释放?
代码:
#import "AppDelegate.h"
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[self readData]; // read one
NSLog(@"read1");
sleep(1);
[self readData2];
}
- (void)readData2 {
[self readData]; // read two
NSLog(@"read2");
}
- (void)readData {
__block NSMutableData *data = [NSMutableData dataWithContentsOfFile:@"test"]; // file is 125 MB
NSUInteger size = [data length];
for (NSUInteger i = 0; i < size; i++) {
// do stuff
}
return;
}
@end
答案 0 :(得分:1)
尝试使用dataWithContentsOfFile:options:error
选项:
<强> NSDataReadingMappedIfSafe 强>
指示文件应该映射到虚拟内存的提示,如果 可行且安全。
虽然dataWithContentsOfFile
的说明未表明,但未使用options
可能会导致数据被保留。
<强> dataWithContentsOfFile 强>
此方法等效于dataWithContentsOfFile:options:error: 没有选择。如果你需要知道失败的原因是什么, 使用dataWithContentsOfFile:options:error:。