實現(xiàn) description 方法
NSlog 在輸出自定義的類時, 只輸出了 類名 和 對象的內(nèi)存地址. 要想輸出更為有用的信息也很簡單, 只需要覆寫 description 方法并將描述此對象的字符串 返回即可.
- (NSString*)description{
return ? ? xxxxxxx;
}
有個簡單的辦法, 可以在 description 中輸出很多互不相同的信息, 那就是借助 NSDictionary 類的 description 方法.
- (NSString *)description{
return ?[NSString stringWithFormat:@"%@",@{@"title: _title, @"age":@(_age)"}];
}
NSObject 協(xié)議中還有一個方法 ?debugDescription , 此方法的用意與 description 非常相似, 二者的區(qū)別在于, ?debugDescription 方法是開發(fā)者在調(diào)試器中以控制臺命令 打印對象時才調(diào)用的. ?在 NSObject ?的默認實現(xiàn)中, 此方法只是直接調(diào)用了 description?
使用方法, 我們在創(chuàng)建實例所用的代碼后面插入斷點, 然后通過調(diào)試器, 使其暫停于此, 當程序運行到斷點時, 開發(fā)者就可以向調(diào)試器控制臺中輸入命令了, ?
'po' 命令, 可以完成對象打印的 (prient-object) 工作.
同樣, 你也可以覆寫 debugDescription 的方法, 使其更合你意.
總結(jié):
實現(xiàn) description 方法返回一個有意義的字符串, 用以描述該實例
若想在調(diào)試時打印出更詳細的對象描述, 則應實現(xiàn) debugDescription 方法, ?'po' 命令, 打印對象
2: 盡量使用不可變對象
設計類的時候, 應充分運用屬性來封裝數(shù)據(jù). 而在使用屬性時, 則可將其生命為 '只讀'. 默認情況下, 屬性是 '可讀可寫的', 這樣設計出來的類都是 '可變的'. 不過, 一般情況下,我們要建模的數(shù)據(jù)未必需要改變.
?具體到編程實踐中,則盡量把對外公布出來的屬性設為只讀, 而且在只有卻又必要的時候?qū)ν夤?
總結(jié):
盡量創(chuàng)建不可變的對象
3: 使用清晰而協(xié)調(diào)的命名方式
盡量使用 ?'駝峰式大小寫命名法'?
方法命名 長度要適中, 表達清晰, 且言簡意賅.
給方法命名時的注意事項
(1) 如果方法的返回值是新創(chuàng)建的, 那么方法名的首個詞應是返回值的類型, 除非前面還有修飾語.屬性的存取方法不遵循這種命名方式. ?屬性的存取方法應該按照其對應的屬性來命名.
(2) 應該把表示參數(shù)類型的名詞放在參數(shù)前面.
(3) 如果方法要在當前對象上執(zhí)行操作. 那么就應該 包含動詞, 若執(zhí)行操作時還需要參數(shù). 則應該在動詞后面加上 一個 或多個名詞.
(4) 不要使用 str 這樣的簡稱, 而應該使用 String 這樣的全稱.
(5) Boolen ?屬性應加上 is 前綴, 如果某方法返回非屬性的 Boolean 值, 那么應該根據(jù)其功能, 選用 has 或 ?is 當前綴.
(5) 將 get 這個前綴 留給那些 借由 ' 輸出參數(shù)' 來保存返回值的方法.
類與協(xié)議的命名
應該為類與協(xié)議的名稱加上前綴, 以避免命名空間沖突. 而且應該像給方法起名時那樣吧詞句組織好, 使其從左至右讀起來較為通順.
類 與 協(xié)議的命名慣例, 命名方式應該協(xié)調(diào)一致.?
總結(jié):
起名時應遵循從標準的 OC 命名規(guī)范
方法名要言簡意賅, 從左至右讀起來順暢
方法名里不要使用縮略后的類型名稱
為私有方法命名規(guī)范
以 'p_' 開頭命名私有方法, 這樣容易區(qū)分
不要但用一個下劃線 '_' 做私有方法的前綴, 因為這種方法是預留給蘋果公司的.