XCode分析儀告訴我在第4行有一個問題 - return [originalError copy];
- 但我沒有看到它。請幫幫我?這段代碼的內存管理問題是什麼?
- (NSError *)errorFromOriginalError:(NSError *)originalError error:(NSError *)secondError
{
if (secondError == nil) {
return [originalError copy];
}
// ...
}
問題描述如下:
- 上線分配的物體的潛在的泄漏203
- 方法返回一個Objective-C對象與1保留計數(擁有參考)
- 返回給調用者的對象作爲擁有參考(單個保留計數轉移給調用者)
- 線203上分配的對象從方法w返回軟管名稱('errorFromOriginalError:error:')不包含'copy'或以'new'或'alloc'開頭。這違反了Cocoa存儲管理指南中給出的命名約定規則(對象泄露)
- 可能的空解除引用。根據「創建和返回NSError對象」中的編碼標準,參數'錯誤'可能爲空
第三個問題似乎表明我應該更改名稱或方法的行爲。對此有何建議?該方法源自Apple's Core Data Validation document中描述的errorFromOriginalError:error:
方法。其目的是結合originalError
和secondError
,以便secondError
是originalError
的子錯誤。
我的補充嘗試確保該方法仍然有效,如果沒有實際的secondError
。由於如果secondError
不是nil
就會創建一個新的錯誤對象,我想通過簡單地複製錯誤對象來重新創建上述情況。
謝謝,這確實解決了問題,除了最後一個(潛在的空解除引用)。我如何擺脫那個?我嘗試添加'if(originalError == nil) return nil;'在方法開始時,但無濟於事。 – winsmith
看到這個答案:http://stackoverflow.com/questions/1189518/clang-error-on-potential-null-dereference/1189570#1189570 – jrturton
Merci。 (我想知道是否不贊成在SO上添加「謝謝」意見,我認爲這很有禮貌,但社區是怎麼想的?) – winsmith