NSData dataWithContentsOfURL内存泄漏

时间:2015-05-06 17:06:38

标签: objective-c macos memory-leaks nsdata

在XCode 5.1 for OSX中生成了一个命令行工具项目,以下简单代码仅用于证明NSData内存泄漏。 永远不会释放NSData对象。循环中的每个新实例都会增加内存泄漏。自动释放不起作用。某些直接释放尝试会导致语法错误。有什么建议? 用@autoreleasepool来绕过NSData分配并没有帮助。 如果我将NSData对象更改为NSString对象,它也会导致内存泄漏。因此,它似乎是此命令行工具环境中的一般内存释放问题。 从memoryLeak方法返回到调用者,内存仍未解密。

+ (void) memoryLeak {
    NSURL  *tileURL = [NSURL URLWithString:@"http://c.tile.openstreetmap.org/9/0/0.png"];

    for (int i=0; i < 10; i++) {
        NSData *tile = [NSData dataWithContentsOfURL:tileURL];
    }
}

1 个答案:

答案 0 :(得分:0)

尝试将代码更新为:

+ (void) memoryLeak {
    @autoreleasepool {
        NSURL  *tileURL = [NSURL URLWithString:@"http://c.tile.openstreetmap.org/9/0/0.png"];

        for (int i=0; i < 10; i++) {
            NSData *tile = [NSData dataWithContentsOfURL:tileURL];
        }
    }
    // Memory should be cleaned up here
}

它还会泄漏吗?如果这样看起来像一个bug,如果没有,你可能会在自动释放池有机会清除它之前检测到泄漏。