2010-08-27 28 views
3

NSFileManager有一个方法来复制。我应该释放NSFileManager的copyItemAtPath的NSError对象:toPath:error:?

- (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 *)dataWithPropertyList:(id)plist format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt error:(NSError **)error 

和参数是(NSError **)现在。不需要像其他类似的方法发布。所以一般的记忆管理规则不需要发布这种论点。

---参考文档

在苹果的Advanced Memory Management Programming Guide,节你做的引用返回属于自己的对象:

当你调用任何这些方法,你没有创建NSError对象,所以你不拥有它。

回答

5

返回NSError对象是自动释放的对象,所以你不应该释放它

的说法只是告诉函数在哪里把返回的错误对象(如果有的话)

编辑:不能拼今天看来

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

如果你与这样的工作返回

(NSString **) 

那么你应该检查清楚说明你是否需要发布它的文档。如果你释放回国的物体,像

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

然后不wory对他们的文件没有说明任何东西,他们将被释放在适当的时候或已经由框架自动释放。