当我删除数组时,我是否也删除了字典的每个元素?
NSMutableArray *myArry = [NSMutableArray arrayWithCapacity:100];
NSMutableDictionary *myDic = [NSMutableDictionary dictionaryWithCapacity:10];
[myArray addObject:myDic]; // this is done in loop
[myDic removeAllObjects]; // Is this necessary?
[myArray removeAllObjects];
答案 0 :(得分:4)
没有。当您release
数组时,其中的每个项目都会自动发送release
消息,因此您不需要删除它们,释放它们或调整它们,只需使用-[NSArray release]
<释放数组/ p>
正确的代码是
NSMutableArray *myArry = [[NSMutableArray alloc] initWithCapacity:100];
NSMutableDictionary *myDic = [NSMutableDictionary dictionaryWithCapacity:10];
[myArray addObject:myDic]; // this is done in loop
…
[myArray release]; // To dispose of the array and it's contents. No need to remove objects
NSDictionary
的行为方式相同,也就是说,您不需要删除它们,只释放它们。在移动示例中,您添加的词典是自动释放的,这意味着一旦myArray
释放它们,它们就会被释放
答案 1 :(得分:0)
好的,当您释放字典或从拥有它的对象中删除对象并且其保留计数为0时,表示它已被释放。如果字典仅由数组拥有(它的保留计数为1)并且您删除了该对象,则该数组不拥有该字典,因此它将释放它。这将随后释放字典中的对象。
最好在编程之前阅读内存管理和对象所有权,因为你不想泄漏。 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html
答案 2 :(得分:0)
您不需要使用您的代码对removeAllObjects
进行任何一次调用(无论如何都是memory management's sake),因为NSMutableArray
和{{1}都是如此是自动释放的(因为你使用了类方法初始值设定项)。
但是,为了这个代码的not flooding the autorelease pool本地代码(并且根据你向数组中添加字典的循环次数的迭代次数),你可能会发现使用以下内容提高了内存效率代码:
NSMutableDictionary
如果您想在不重新分配数组的情况下重新使用数组,您还可以使用NSMutableArray *myArry = [[NSMutableArray alloc] initWithCapacity:100];
NSMutableDictionary *myDic = [[NSMutableDictionary alloc] initWithCapacity:10];
[myArray addObject:myDic]; // this is done in loop
[myDic release];
// ... other code...
[myArray release];
释放其所有内容,从而释放其中的词典内容 - 如只要您在使用完毕后仍然发送removeAllObjects
消息,并在离开范围之前发送消息。
答案 3 :(得分:-1)
只需使用“发布”即可。 如果您使用的是malloc而不是“free”。