我是否需要发布复制的NSObjects - Objective-c

nco*_*hen 14 iphone cocoa memory-management copy objective-c

我想知道我是否需要发布复制的NSObject?例如,我只创建一个复制到数组中的字典:

码:

for (int num = 0; num < [object count]; num++) {
    [dictionary setObject:[object objectAtIndex:num] forKey:@"x"];
    [array addObject:[dictionary copy]];
}
Run Code Online (Sandbox Code Playgroud)

我必须发布字典吗?如果是,何时?

谢谢

Noa*_*oon 24

是的你是.在这种情况下,您应该在将副本添加到数组后立即释放副本,因为该数组会保留添加到其中的任何内容:

 NSDictionary *copied = [dictionary copy];
 [array addObject:copied];
 [copied release];
Run Code Online (Sandbox Code Playgroud)


Vic*_*tor 5

来自文档的这个片段:

- (id)复制

返回值NSCopying协议方法copyWithZone:返回的对象,其中区域为nil.

讨论对于采用NSCopying协议的类,这是一种便捷方法.如果没有copyWithZone的实现,则会引发异常:

NSObject本身不支持NSCopying协议.子类必须支持该协议并实现copyWithZone:方法.copyWithZone:方法的子类版本应该首先将消息发送到super,以合并其实现,除非子类直接从NSObject下降.

特殊注意事项如果您使用的是托管内存(不是垃圾回收),则此方法会在返回之前保留新对象.但是,该方法的调用者负责释放返回的对象.