我想爲可可中的對象提供描述性字符串。我正在考慮重寫描述方法或stringValue方法。哪個更好,爲什麼?我能找到的唯一指南是in here陳述覆蓋可可中的描述或stringValue?
你不鼓勵從重寫描述。
這確實是你會建議的嗎?任何其他首選的覆蓋點?
我想爲可可中的對象提供描述性字符串。我正在考慮重寫描述方法或stringValue方法。哪個更好,爲什麼?我能找到的唯一指南是in here陳述覆蓋可可中的描述或stringValue?
你不鼓勵從重寫描述。
這確實是你會建議的嗎?任何其他首選的覆蓋點?
description
是要走的路,這就是它被稱爲供應對象的字符串表示。
- (NSString*)description
{
return [NSString stringWithFormat:@"%@, %@; %@", a, b, c];
}
我相信Hillegass的書也是這樣建議的。
謝謝,因爲Hillegass提醒;) – mvexel 2009-12-14 10:45:28
我個人在幾乎所有的子類中覆蓋了description
。我想,就像Tom Duckering在他的評論中寫道,你的引用只適用於託管對象。
- (NSString *)description
{
return [NSString stringWithFormat:@"%@ <%p>", NSStringFromClass([self class]), self];
}
您也可以覆蓋調試器調用的[NSObject debugDescription]。在調試器中使用「print to console」時,這就是所謂的。你也可以直接在NSLog中調用它。
默認情況下,在大多數類debugDescription
只是調用description
,但你可以讓他們返回單獨的字符串。這是載入輸出細節的好地方。
類別是停放自定義類和現有類的方法的好地方。這是特別有用的,因爲您可以將該類別包含在調試版本中,但在版本中將其排除。如果該類別不存在,代碼會調用默認的類方法。
我有一個UIView的調試類別,它拋出了我能想到的每個屬性。如果我遇到了一個令人討厭的錯誤,那麼我只包含這個類別,然後我可以在調試器控制檯中看到關於每個視圖的所有信息。
要從另一個方向回答你的問題,stringValue
是完全不同的 - 它沒有描述接收者,它是它的一個屬性。您的自定義description
甚至可能包含stringValue
,或者如果它很長,可以摘錄它。
一個關鍵的區別是stringValue
通常是一個可變屬性(請參閱,例如,NSControl的屬性),而description
始終是一個不可變屬性,根據需求計算。
你的鏈接是關於核心數據的文檔 - 你想重寫NSManagedObject的描述方法還是其他? – 2009-12-14 10:26:19
我不這麼認爲 - 它是一個NSObject子類,它保存空間邊界框的數據以及其中的一些操作。字符串描述基本上是逗號分隔的左下角和右上角座標列表。 – mvexel 2009-12-14 10:36:53