我目前正在执行以下操作以清除 NSMutableDictionary
[myDictionary release];
myDictionary = [[NSMutableDictionary alloc] init];
释放行实际上并不释放字典中的任何对象。我仍然可以在下一行看到所有这些。直到执行 alloc 行,字典才被清零。有更好的方法吗?
我目前正在执行以下操作以清除 NSMutableDictionary
[myDictionary release];
myDictionary = [[NSMutableDictionary alloc] init];
释放行实际上并不释放字典中的任何对象。我仍然可以在下一行看到所有这些。直到执行 alloc 行,字典才被清零。有更好的方法吗?
我暂时无法测试,但是您尝试过的removeAllObjects
方法NSMutableDictionary
吗?
你说:
释放行实际上并不释放字典中的任何对象。我仍然可以在下一行看到所有这些。直到执行 alloc 行,字典才被清零。有更好的方法吗?
如果-release
可变字典导致字典被释放——将保留计数降至零——那么可变字典将释放所有包含的对象。总是。
因此,如果对象没有被释放,那么这建议“修复”......
[myDictionary removeAllObjects];
[myDictionary release];
myDictionary = [[NSMutableDictionary alloc] init];
... 是内存泄漏,因为 NSMutableDictionary 的原始实例将被泄漏。
结果,调用-removeAllObjects
将清空字典并释放所有包含的对象,但是您仍然应该找出并修复内存泄漏。
说白了:
如果在字典接收到上述内容时-release
(没有调用-removeAllObjects
),字典中的对象没有被释放,则存在内存泄漏。它是:
字典中的对象被保留了额外的时间。
-retain
字典上还有一个优秀
的。
既然你说当你调用时对象被正确地(如预期的那样)释放-removeAllObjects
,那么它必须是(2)。查看您的代码并找出-retain
字典的额外内容。您可以使用Object Alloc工具来确定所有保留的确切来源。
正如安迪所说,-removeAllObjects 将起作用。但是,如果您的字典的任何对象是自动释放的,或者字典本身已经在沿线某处自动释放,那么它们将不会被释放,直到下次运行循环完成(当自动释放池耗尽时) .
[aMutableDictionary removeAllObjects];
来自Apple 的文档:
(void)removeAllObjects
说明 - 清空其条目的字典。每个键和对应的值对象都被发送一个释放消息。
可用性 - iOS(2.0 及更高版本)