我应该释放NSFileManager的copyItemAtPath:toPath的NSError对象:错误:?

时间:2010-08-27 03:52:51

标签: cocoa cocoa-touch memory-management

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对象,因此您不拥有它。

2 个答案:

答案 0 :(得分:5)

返回的NSError对象是一个自动释放的对象,因此您不应该将其释放

参数只是告诉函数将返回的错误对象放在哪里(如果有的话)

编辑:今天似乎无法拼写

答案 1 :(得分:1)

[NSPropertyListSerialization propertyListFromData:(NSData *) mutabilityOption:(NSPropertyListMutabilityOptions) format:(NSPropertyListFormat *) errorDescription:(NSString **)]

如果你正在使用这样的东西返回

(NSString **)

然后你应该查看明确说明你是否需要发布它的文档。如果文档没有说明发布返回对象的任何内容,如

- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error

然后不要了解它们,它们将在适当的时候发布或者已经被框架自动释放。