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对象,因此您不拥有它。
答案 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
然后不要了解它们,它们将在适当的时候发布或者已经被框架自动释放。