我的应用有时会读取,使用数据,然后可能需要稍后再读取。我注意到,如果我一旦读取数据就将其释放,但是如果我碰巧再次读取它,它将永远不会被释放。
如果再次读取,为什么不释放数据?
码:
#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
最佳答案
尝试将dataWithContentsOfFile:options:error
与选项一起使用:
NSDataReadingMappedIfSafe
如果文件提示,则应将其映射到虚拟内存中
可能和安全。
尽管dataWithContentsOfFile
的描述未指明,但不使用options
可能会导致否则保留数据。
dataWithContentsOfFile
此方法等效于dataWithContentsOfFile:options:error:
没有选择。如果您想知道失败的原因是什么,
使用dataWithContentsOfFile:options:error:。