复制时谁负责释放数组中的对象?

hug*_*gie 3 cocoa memory-management objective-c nsarray

在Objective-C中,如果使用mutableCopy将array1复制到array2上,并假设代码在main()中完成,谁负责释放数组中包含的对象?是main()还是array2?

Qui*_*lor 13

我认为之前的答案已经错过了重点,否则提问者很不清楚.实际的问题不是讨论数组,而是数组内容:

谁负责释放数组中包含对象?是main()还是array2?

双方array1array2负责释放的对象.

NSArray文档:

"数组保持对其内容的强引用 - 在托管内存环境中,每个对象在将id添加到数组之前接收保留消息,并在从数组中删除数据或者释放数组时发送消息."

首先,NSArray保留每个对象array1.创建array2via时-mutableCopy,会得到一个NSMutableArray,它指向相同的对象,并再次保留每个对象.如果你array1在此时发布,当它的dealloc方法被调用时,它将释放它包含的每个对象.但是,array2保留了它们,因此对象不会被破坏 - 只有当它们的保留计数达到0时才会array2被破坏,如果被破坏而没有其他人保留任何对象(或者当它们被移除时array2).

由于集合类(数组,集合,字典等)处理保留和释放其内容,因此您需要担心的是保留或释放集合本身.自从您使用以来-mutableCopy,请记住您已隐式保留array2,因此您应该在完成后将其释放.