efffective Objective-C 學習筆記

來源:互聯網
上載者:User

標籤:

第一條:瞭解objective-c語言的起源

訊息結構而非函數調用。區別在於:使用訊息結構的語言,其運行時所應執行的代碼由運行環境來決定;而使用函數調用的語言,則由編譯器決定。

Objective-c為C語言添加了物件導向特性,是其超集。Objective-C使用動態綁定的訊息結構,也就是說,在運行時才會檢查物件類型。接受一條訊息之後,究竟應執行何種代碼,由運行期環境而非編譯器來決定。掌握C的記憶體模型和指標。

第二條:在類的標頭檔盡量少引入其他標頭檔

除非確有必要,否則不要引入標頭檔。一般來說,應在某個類的標頭檔中使用向前聲明來提及別的類,並在實現檔案中引入那些類的標頭檔。這樣做可以盡量降低類之間的耦合。

有時無法使用向前聲明,比如要聲明某個類遵循一項協議。這種情況下,盡量把“該類遵循某協議”的這條聲明移至“class-continuation分類”中。如果不行的話,就把協議單獨放在一個標頭檔,然後將其引入。

 

第三條:多用字面量文法,少用與之等價的方法

應該使用字面量文法來建立字串、數值、數組、字典。與建立此類對象的常規方法相比,這麼做更簡明。

應該通過下標操作來訪問數組下標或字典中的鍵所對應的元素。

用字面量文法建立數組或字典時,若值中有nil,則會拋出異常。因此,務必確保值裡不含nil。

 

第四條:多用類型常量,少用#define預先處理指令

不要用預先處理指令定義常量。這樣定義出來的常量不含類型資訊,編譯器只是會在編譯前據此執行尋找和替換操作。即使有人重新定義了常量值,編譯器也不會產生警告資訊,這將導致應用程式中常量值不一致。

在實現檔案中使用static const 來定義“只在編譯單元內可見的常量”。由於此類常量不在全域符號表中,所以無須為其名稱加首碼。

在標頭檔中使用extern來聲明全域變數,並在相關實現檔案中定義其值。這種常量要出現在全域符號表中,所以其名稱應加以區隔,通常用與之相關的類名作首碼。

 

第五條:用枚舉表示狀態、選項、狀態代碼

應該用枚舉來表示狀態機器的狀態、傳遞給方法的選項以及狀態代碼等值,給這些值起個易懂的名字。

如果把傳遞給某個方法的選項表示為枚舉類型,而多個選項又可同時使用,那麼就將各選項值定義為2的冪以便通過按位或操作將其組合起來。

用NS_ENUM與NS_OPTIONS宏來定義枚舉類型,並指明其底層資料類型。這樣做可以確保枚舉是開發人員所選的底層資料類型實現出來的,而不會採用編譯器所選的類型。

在處理枚舉類型的switch語句中不要實現default分支。這樣的話,加入新枚舉之後,編譯器就會提示開發人員:switch語句並未處理所有枚舉。

efffective Objective-C 學習筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.