dataWithContentsOfFile

dataWithContentsOfFile

我的应用有时会读取,使用数据,然后可能需要稍后再读取。我注意到,如果我一旦读取数据就将其释放,但是如果我碰巧再次读取它,它将永远不会被释放。

如果再次读取,为什么不释放数据?

码:

#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:。

10-08 05:54