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

yeh*_*nan 3 cocoa cocoa-touch memory-management

NSFileManager有一个复制方法.

- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)

如果发生错误,返回时的第三个参数(NSError**)将包含描述问题的NSError对象.

问题:我需要发布它吗?

还有一些其他方法,例如这个方法(NSString**),

NSPropertyListSerialization +(NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format errorDescription:(NSString **)errorString
Run Code Online (Sandbox Code Playgroud)

他们遵循相同的内存管理规则吗?要发布或不发布,这就是问题所在.

- -回答

正如安德斯所说,答案是"不"要发布.

我感到困惑,因为NSPropertyListSerialization类有一个方法

+ (NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format errorDescription:(NSString **)errorString
Run Code Online (Sandbox Code Playgroud)

文件说如果不是零,我应该释放第三个参数.然而,它被弃用并取而代之

+ (NSData *)dataWithPropertyList:(id)plist format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)

并且参数现在是(NSError**).无需像其他类似方法一样发布.因此一般的内存管理规则不需要释放这种参数.

---参考文件

在Apple的高级内存管理编程指南中,您不拥有通过引用返回的对象部分:

当您调用这些方法中的任何一个时,您不会创建NSError对象,因此您不拥有它.

And*_*rsK 5

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

该参数只是告诉函数放置返回的错误对象的位置(如果有的话)

编辑:今天似乎拼不出来