我知道這似乎是一個非常基本的問題,但我一直認爲解釋(和理解)基本問題是構建乾淨和有效代碼的關鍵。在Xcode中運行「分析」我得到了著名的「潛在的空提領」創建錯誤時在處理NSError時理解'潛在的空解除引用'
-(BOOL)validateForInsert:(NSError *__autoreleasing *)error {
[super validateForInsert:error];
return [self validateInternal:error];
}
-(BOOL)validateInternal:(NSError *__autoreleasing *)error {
// checking attributes and build userInfo error
if(anyErrors) {
*error = [NSError errorWithDomain:appDomain code:200 userInfo:details];
return NO;
}
return YES;
}
: 我的代碼在CoreData實體下面的代碼片段。雖然編譯器沒有提供任何警報,並且代碼一直工作。 這也可能是一個問題,爲什麼編譯器沒有提醒我這個問題?但是到代碼中,我完全知道這個解決方案,它是檢查(錯誤!=無),但是我在這方面很迷茫。 問題從一開始就在NSError * _autoreleasing *的意思,爲什麼周圍的明星?哪一個應該是一個指針指針?
假設我想調用validateForInsert:我自己如何構建* _autoreleasing *對象?
下面的問題,我想是與上面的問題有關:如果我從頭開始構建*錯誤,爲什麼我想檢查是否爲零?
最後但並非最不重要的是,代碼工作正常,錯誤被攔截,請問您能否發現可能導致錯誤或崩潰的案例?正如我所說我正在使用CoreData,一個通用的例子會很好,但另一個與CoreData有關的讚賞。
感謝
我完全錯過了autoreleasing的含義,我把它想成是一個變量名!感謝您的解釋,對我來說,標記爲答案已經足夠了。 – Leonardo 2012-08-17 12:17:28
不客氣。 – 2012-08-17 12:22:55