我正在用这个做 NSMutableDictionary 的深拷贝:https ://stackoverflow.com/a/5453600/555690
像这样:
NSMutableDictionary *myCopy = [originalMutableDictionary mutableDeepCopy];
我必须释放myCopy
吗?
我正在用这个做 NSMutableDictionary 的深拷贝:https ://stackoverflow.com/a/5453600/555690
像这样:
NSMutableDictionary *myCopy = [originalMutableDictionary mutableDeepCopy];
我必须释放myCopy
吗?
我假设您没有使用ARC。答案应该是“是”,因为它是用副本创建的。在此处查看 NARC 规则:
在 Objective-C 中是否需要在方法的末尾释放参数?
在那个特定的代码中,它ret
是使用创建的,dictionaryWithObjects
所以它已经被自动释放了,但是还有一个额外retain
的被显式调用。所以答案是……仍然是“是”,这遵循所有权政策。
代码retain
在创建时将 a 添加到返回值,并且在返回之前不平衡它:
NSMutableArray *ret = [[NSMutableArray arrayWithObjects:cArray count:count] retain];
// The newly-created array retained these, so now we need to balance the above copies
for (unsigned int i = 0; i < count; ++i)
[cArray[i] release];
return ret;
这符合 Cocoa命名约定和内存管理规则,即mutableCopy
名称中包含的方法返回一个拥有的值。
你通过这种方法得到的字典确实是你所有的,必须由你释放。
请注意,上面片段中的中间行确保字典中包含的对象仅由字典本身拥有;您不对这些直接负责。当字典被销毁时,它们将被释放。