【发布时间】:2010-08-27 03:52:50
【问题描述】:
NSFileManager 有一个复制的方法。
- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error
如果发生错误,第三个参数(NSError **)在返回时会包含一个描述问题的NSError对象。
问题:我需要发布它吗?
还有一些其他的方法,比如这个采用(NSString **),
NSPropertyListSerialization +(NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format errorDescription:(NSString **)errorString
它们是否遵循相同的内存管理规则?放还是不放,这是个问题。
---答案
正如安德斯所说,答案是“不”发布。
我很困惑,因为 NSPropertyListSerialization 类有一个方法
+ (NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format errorDescription:(NSString **)errorString
文档说如果不是零,我应该释放第三个参数。但是它已被弃用并被
取代+ (NSData *)dataWithPropertyList:(id)plist format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt error:(NSError **)error
现在参数是 (NSError **)。无需像其他类似方法一样释放。所以一般的内存管理规则是不需要释放这种参数的。
---参考文档
在 Apple 的 Advanced Memory Management Programming Guide 中,您不拥有通过引用返回的对象部分:
当您调用任何这些方法时,您不会创建 NSError 对象,因此您不拥有它。
【问题讨论】:
标签: cocoa cocoa-touch memory-management