在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];
}
}
答案 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,如果没有,你可能会在自动释放池有机会清除它之前检测到泄漏。