4th*_*ace 19 iphone cocoa-touch objective-c nsmutabledictionary
我目前正在执行以下操作以清除NSMutableDictionary
[myDictionary release];
myDictionary = [[NSMutableDictionary alloc] init];
Run Code Online (Sandbox Code Playgroud)
释放行实际上不会释放字典中的任何对象.我仍然可以在下一行看到所有这些.直到执行alloc行,字典才被清零.有没有更好的方法呢?
And*_*ite 34
我目前无法测试它,但你尝试过这种removeAllObjects方法NSMutableDictionary吗?
bbu*_*bum 30
你说:
释放行实际上不会释放字典中的任何对象.我仍然可以在下一行看到所有这些.直到执行alloc行,字典才被清零.有没有更好的方法呢?
如果-release可变字典导致字典被解除分配 - 将保留计数丢弃为零 - 那么可变字典将释放所有包含的对象.总是.
因此,如果没有释放对象,那么建议"修复"......
[myDictionary removeAllObjects];
[myDictionary release];
myDictionary = [[NSMutableDictionary alloc] init];
Run Code Online (Sandbox Code Playgroud)
...是一个内存泄漏,因为NSMutableDictionary的原始实例将被泄露.
因此,调用-removeAllObjects 将清空字典并释放所有包含的对象,但您仍然有一个内存泄漏,您应该弄清楚并修复.
直言不讳:
如果字典中的对象在字典收到上述内容-release(未调用-removeAllObjects)时未被释放,则存在内存泄漏.它是:
字典中的对象保留了额外的时间.
-retain字典上仍然有一个优秀
的.
既然你说在调用时对象是正确的(如在预期中那样)-removeAllObjects,那么它必须是(2).查看您的代码并找出哪里有额外-retain的字典.您可以使用Object Alloc仪器确切地确定所有保留的来源.
正如Andy所说,-removeAllObjects将起作用.但是,如果您的任何字典对象是自动释放的,或者字典本身已经在该行的某个位置自动释放,那么在下次runloop完成时(自动释放池耗尽时)它们将不会被释放. .
| 归档时间: |
|
| 查看次数: |
26528 次 |
| 最近记录: |