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)
来自文档的这个片段:
- (id)复制
返回值NSCopying协议方法copyWithZone:返回的对象,其中区域为nil.
讨论对于采用NSCopying协议的类,这是一种便捷方法.如果没有copyWithZone的实现,则会引发异常:
NSObject本身不支持NSCopying协议.子类必须支持该协议并实现copyWithZone:方法.copyWithZone:方法的子类版本应该首先将消息发送到super,以合并其实现,除非子类直接从NSObject下降.
特殊注意事项如果您使用的是托管内存(不是垃圾回收),则此方法会在返回之前保留新对象.但是,该方法的调用者负责释放返回的对象.
| 归档时间: |
|
| 查看次数: |
3952 次 |
| 最近记录: |