Objective-C,NSMutableData未发布

时间:2015-02-17 01:08:29

标签: ios objective-c macos cocoa nsmutabledata

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

为什么再次阅读时数据不会被释放?

代码:

#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

enter image description here

1 个答案:

答案 0 :(得分:1)

尝试使用dataWithContentsOfFile:options:error选项:

<强> NSDataReadingMappedIfSafe

  

指示文件应该映射到虚拟内存的提示,如果   可行且安全。

虽然dataWithContentsOfFile的说明未表明,但未使用options可能会导致数据被保留。

<强> dataWithContentsOfFile

  

此方法等效于dataWithContentsOfFile:options:error:   没有选择。如果你需要知道失败的原因是什么,   使用dataWithContentsOfFile:options:error:。