2010-08-27 29 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對他們的文件沒有說明任何東西,他們將被釋放在適當的時候或已經由框架自動釋放。