2013-02-28 39 views
1

我遇到以下代碼的問題,其中Xcode標記內存問題。警告在代碼之下,在返回線上。有人知道爲什麼,我能做些什麼嗎?帶有+0保留計數的對象返回給調用者,其中+1(擁有)保留計數是預期的 - 爲什麼?

- (id)copyWithZone:(NSZone *)zone 
{ 
    NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject:self]; 
    return [NSKeyedUnarchiver unarchiveObjectWithData:archivedData]; 
} 

Mvariable.m:177:2:用0對象保留計數返回到呼叫者其中1(擁有)保留計數預計
Mvariable.m:177:9:方法返回具有+0保留計數的Objective-C對象
Mvariable.m:177:2:使用+0保留計數返回給調用方的對象
Mvariable.m:177:2:具有+0保留計數的對象返回到呼叫者,其中+1(擁有)保留計數預計

回答

7

以「copy」,「create」,「new」,「alloc」或「retain」開頭的方法必須返回一個已被保留的對象,即調用者必須釋放它。

[NSKeyedUnarchiver unarchiveObjectWithData:archivedData]返回自動回覆的對象。

請參閱:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html

+3

請注意,使用歸檔來複制對象絕對不是典型的。與通常的做法相比,它也很慢。 – bbum 2013-02-28 21:00:51

+0

哦哇,我沒有意識到一個方法名稱的開始可以做到這一點,有多奇怪。感謝你的回答! – Tiago 2013-02-28 21:06:33

+0

在過去,它只是一個慣例,沒有ARC,或者__strong和__weak的標記或者(__attribute __((ns_returns_autoreleased)))的句法甜味......所以我們必須保留以某種方式跟蹤事物... – 2013-02-28 22:02:53

相關問題