NSMutableData 不自动释放内存

NSMutableData not releasing memory automatically

我正在编写 iOS 程序,但出现内存泄漏。我在macOS上重现了,不知道怎么解决。很简单。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        system("top -l 1 | grep LEAK"); // baseline
        NSMutableData* dataobj = [NSMutableData dataWithLength:DATA_SIZE];
        system("top -l 1 | grep LEAK"); // baseline + 8 bytes
        memset([dataobj mutableBytes], 1, DATA_SIZE);
        system("top -l 1 | grep LEAK"); // baseline + DATA_SIZE
        dataobj = nil;
        system("top -l 1 | grep LEAK"); // baseline + DATA_SIZE
    }
    return 0;
}

最后,我希望内存使用率再次达到基线,但事实并非如此。等了10秒还是一样的结果。我相信一定是我对ARC或者NSData.

的理解有问题

谢谢大家提前看一下。

您正在使用以下内容创建数据:

NSMutableData* dataobj = [NSMutableData dataWithLength:DATA_SIZE];

由于 Memory Management Policy 你不是这个对象的所有者,它被放置在自动释放池中。由于您的代码完全嵌入到 @autoreleasepool { ... } 中,因此它无法检测到数据的重新分配,因为它由该池保存。

您的代码不包含泄漏,操作系统负责清理。这通常会使您的实验是否成功非常值得怀疑。最后,我想赞同 Amin 的评论:你使用了错误的方法。您应该改用 Instruments。