Effective Objective-C 2.0 學習筆記(三)

來源:互聯網
上載者:User

以下內容主要是學習《Effective Objective-C 2.0》所做的筆記,我所購買的原書為英文原版,由於自己英文水平有限,理解可能有疏漏

原書購買地址:亞馬遜


3、Interface and API Design


Item 15: Use Prefix Names to Avoid Namespace Clashes

一些知識點:

(1)由於蘋果公司的系統架構名都是以兩個字母開頭的,所以為了避免與之衝突,開發人員定義的命名首碼至少採用三個字母開頭。

(2)由於修改第三方庫首碼名,要注意不要重複引用第三方庫。

要記住的:

(1)選擇一個適合你公司、應用或兩者的首碼名,然後嚴格的執行這條首碼命名。

(2)如果你使用第三方庫作為獨立的引用,考慮給它加上你自己的首碼名。


Item 16: Have a Designated Initializer

要記住的:

(1)在你自己編寫的類中實現一個定製的初始函數,並且給出文檔說明是哪個。其他的初始函數調用都必須通過這個定製的初始函數。

(2)如果定製的初始函數與父類的不相同,確保父類的初始函數在子類中被重寫。

(3)重寫的父類的初始函數需要拋出異常避免在子類中被調用。


Item 17: Implement the description Method

一些知識點:

(1)description方法在NSLog對象時被調用,debugDescription方法只在調試時執行po命令時被調用

要記住的:

(1)實現description方法,在description函數中提供一個有意義的字串。

(2)如果對象在調試時需要顯示更多詳細的資訊,可以實現debugDescription方法


Item 18: Prefer Immutable Objects

一些知識點:

(1)當某property設定為readonly時不需要設定copy、assign等寫屬性。

要記住的:

(1)儘可能的建立不可變更的對象。

(2)如果需要在內部設定可變更屬性可以在類延續類別中設定readwrite而在介面標頭檔中設定readonly。

(3)為屬性提供讀寫方法比在property中直接設定可變更屬性要更好。


Item 19: Use Clear and Consistent Naming

一些知識點:

(1)關於方法命名的一些建議:

a、如果方法返回的一個新建立的值,那麼方法名的第一個單詞最好是這個值的類型,除非有必要的限定詞需要添加在類型的前面。

b、一個描述參數類型的名詞需要直接出現在參數的前面。

c、如果方法包含對某對象的某種操作,需要在參數前面的名詞後面增加一個表示行為的動詞,用以明確的表達何種操作。

d、禁止在方法名中使用縮寫,如用str代替string。

e、在bool類型的屬性方法前增加is。一個方法返回一個bool類型需要根據需要在前面增加一個has或is。

f、在擷取數值的方法名前需要增加get。

(2)關於類和協議命名的一些建議:

a、在自訂類前面需要增加必要的namespace。

b、整合一個類注意最後一個單詞需要明晰父類的類型。

c、Delegate命名需要以Delegate單詞結尾。

要記住的:

(1)按照基本的Objective-C介面命名來擴充命名自己的方法和類等。

(2)確保方法名簡潔但明確,能夠從左至右讀起來就像一個句子一樣。

(3)禁止使用簡寫。

(4)最重要的是,確保你的命名方法一致,或者與需要組入的模組一致。


Item 20: Prefix Private Method Names

一些知識點:

(1)可以考慮使用p_作為私人方法首碼。

要記住的:

(1)給私人方法增加一個特殊的首碼以便於與公用方法區分開來。

(2)禁止使用單獨的底線作為方法的首碼,因為蘋果自己的方法使用了這一規則,避免重寫蘋果的私人方法。


Item 21: Understand the Objective-C Error Model

一些知識點:

(1)使用-fobjc-arc-exceptions標誌就可以使用異常安全的ARC。但仍然不建議在Objective-C中使用異常,異常容易導致記憶體泄露降低程式效能和崩潰。

(2)異常在Objective-C中的用處之一是在某些需要繼承使用的抽象類別方法中使用,如果這些必須繼承重寫的方法沒有被重寫,則拋出異常。

(3)異常只用於某些致命的錯誤。對於非致命的錯誤通常採用返回nil/0的方式或者返回NSError。

(4)NSerror通常包含3個內容:

a、Error domain (String)定義了錯誤發生的域。

b、Error code (Integer)全域唯一的定義了一個錯誤域的識別碼。通常是一個enum。

c、User info (Dictionary)包含了錯誤的額外資訊或者其他表述錯誤的資訊。

(5)通常一個對象通過代理協議將一個NSError傳輸出去。

(6)另一個傳輸NSError的方法是使用參數方法。使用一個指向指標的指標作為NSError參數類型。如果不關心錯誤的詳細內容,可以返回一個布爾值作為調用成功失敗的判斷標誌。

(7)當NSError作為參數返回判斷錯誤時,需要先判斷返回的NSError是否為空白,再讀取NSError的具體值。

要記住的:

(1)只在擷取致命錯誤並導致程式崩潰的情況下才考慮使用異常方式。

(2)對於非致命錯誤,考慮使用代理方法傳出NSError或者外部參數方法傳輸NSError。


Item 22: Understand the NSCopying Protocol

要記住的:

(1)如果所建立的對象需要被複製,則需要實現NSCopying協議。

(2)如果你所建立的對象同時包含可變更的和不可變更的變數,需要同時實現NSCopying和NSMutableCopying兩個協議。

(3)確定一個拷貝是深拷貝還是淺拷貝,如果可能的話,大多數情況更偏向於實現淺拷貝。

(4)如果你的對象需要深拷貝的話,要考慮增加一個深拷貝的方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.