[iOS筆記]《編寫高品質iOS與OS X代碼的52個有效方法》:1.熟悉Objective-C

來源:互聯網
上載者:User

標籤:

簡介:

最近公司項目收尾,可以有時間看看書了。《編寫高品質iOS與OS X代碼的52個有效方法》這本書講解了很多iOS開發的技巧和規範,大力推薦!

下面是自己看書時整理的筆記,照慣例先上目錄:

 

目錄:

第一章:熟悉Objective-C

第二章:Object、Message、Runtime

第三章:介面與API設計

第四章:Protocol與Category

第五章:記憶體管理

第六章:Block與GCD

第七章:系統架構

   第一章    熟悉Objective-C  第1條:瞭解Objective-C語言的起源 
  • 起源
    •  Smalltalk(訊息型語言的鼻祖)
 
  • 語言類型
    • 訊息結構(messaging structure),對應函數調用(function calling)
 
  • 與函數調用語言的區別
    • 訊息結構:運行時所應執行的代碼由運行環境來決定
    • 函數調用:運行時所應執行的代碼由編譯器決定
 
  • 要點 
    • OC為C語言添加了物件導向特性,是其超集
    • OC使用動態綁定訊息結構,也就是說,在運行時才會檢查物件類型。接收一條訊息之後,究竟應執行何種代碼,由運行期環境而非編譯器來決定
    • 理解C語言的核心概念有助於寫好OC程式,尤其要掌握記憶體模型與指標
   第2條:在類的標頭檔中盡量少引入其他標頭檔 
  • @class
    • 將引入標頭檔的時機盡量延後,只在確有需要時才引入,這樣可以減少類的使用者所需引入的標頭檔數量(減少編譯時間)
 
  • 要點
    • 除非確有必要,否則不要引入標頭檔
    • 一般來說,應在某個類的標頭檔中使用前置聲明來提及別的類,並在實現檔案中引入那些類的標頭檔,這樣做可以盡量降低類之間的耦合
    • 有時無法使用前置聲明,比如要聲明某個類遵循一項協議
   第3條:Literal Syntax 
  • literal syntax可以使NSNumber、NSArray和NSDictionary的代碼更簡潔清晰
    • NSNumber
      • 傳統建立方式
        • NSNumber *someNumber = [NSNumber numberWithInt:1];
      • literal syntax
        • NSNumber *someNumber = @1;
    • NSArray
      • 傳統建立方式
        • NSArray *animals = [NSArray arrayWithObjects:@“cat”, @“dog", nil];
      • literal syntax
        • NSArray *animals = @[@“cat”, @“dog”];
    • NSDictionary
      • 傳統建立方式
        • NSDictionary *personData = [NSDictionary dictionaryWithObjectsAndKeys:@“Matt”, @“firstName”, nil];
      • literal syntax
        • NSDictionary *personData = @{@“Matt” : @“firstName”};
    • NSMutableArray和NSMutableDictionary
      • 傳統取下標修改元素值
        • [mutableArray replaceObjectAtIndex:1 withObject:@“dog”];
        • [mutableDictionary setObject:@“Galloway” forKey:”lastName”];
      • literal syntax
        • mutableArray[1] = @“dog”;
        • mutableDictionary[@“lastName”] = @“Galloway”;
 
  • 局限性
    • 除了字串以外,所建立出來的對象必須屬於Foundation架構
    • 如果自訂了這些類的子類,則無法用Literal Syntax建立其對象
    • 要想建立自訂子類的執行個體,需採用nonliteral syntax
    • 使用Literal Synatax建立出來的對象都是不可變的,如需可變版本,則需copy
 
  • 要點
    • 應該使用Literal Syntax來建立NSString、NSNumber、NSArray、NSDictionary,與建立此類對象的常規方法相比,這麼做更加簡明扼要
    • 應該通過取下標操作來訪問數組下標或字典中的key所對應的元素
    • 用Literal Synatax文法建立數組或字典時,若值中有nil,則會拋出異常。因此,務必確保值裡不含nli
   第4條  多用類型變數,少用#define預先處理指令 
  • 要點
    • 不要用預先處理指令定義常量
      • 這樣定義出來的常量不含類型資訊,編譯器只是會在編譯前據此執行尋找與替換操作。即使有人重新定義了常量值,編譯器也不會產生警告資訊,這將導致應該用程式中的常量值不一致
    • 在實現檔案中使用static const來定義只在編譯單元內可見的常量(translation-unit-specific constant)
      • 由於此類常量不在全域符號表中,所以無需為其名稱加首碼
    • 在標頭檔中使用extern來聲明全域變數,並在相關實現檔案中定義其值
      • 這種常量要出現在全域符號表中,所以名稱應加以區隔,通常用與之相關的類名做首碼
  第5條  用枚舉表示狀態、選項、狀態代碼 
  • 要點
    • 應該用枚舉來表示狀態機器的狀態、傳遞給方法的選項以及狀態代碼等值,給這些值起個易懂的名字
    • 如果把傳遞給某個方法的選項表示為枚舉類型,而多個選項又可同時使用,那麼就將各選項值定義為2的冪,以便通過按為或操作將其組合起來
    • 用NS_ENUM與NS_OPTIONS宏來定義枚舉類型,並指定其底層資料類型
      • 這樣做可以確保枚舉是用開發人員所選的底層資料類型表現出來的,而不會採用編譯器所選的類型
    • 在處理枚舉類型的switch中不要事先default分支
      • 這樣的話,加入新枚舉之後,編譯器就會提示開發人員:switch語句並未處理所有枚舉
   

[iOS筆記]《編寫高品質iOS與OS X代碼的52個有效方法》:1.熟悉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.