天天看點

iOS編碼規範精簡版-根據apple、google等規範總結而來目錄

1.格式和換行

2.命名

3.oc下的cocoa編碼規範

4.注釋要求

5.其他

6.參考文檔

附:ARC下編碼注意事項

此文檔根據apple、google以及其他一些業界知名的oc編碼規範整理而成,并作了大量精簡,旨在為大家的iOS開發規範提供一份簡單、清晰、統一的參考指南。

1.1 隻使用2個空格來縮進,不使用tab.

1.2 方法長度不超過100行,建議不超過80行。

1.3 方法- 和 + 和傳回值之前為1個空格;方法參數之間有一個空格,其他地方不出現多餘的空格。

1.4 條件語句的格式,推薦如下:

不推薦如下的縮進:

2.1 命名統一使用駝峰命名法;隻采納有廣為人知含義的縮寫,比如info、msg、UI、HTTP這類。自造的縮寫不被認可。總體的命名原則是清晰和一緻,避免歧義。

2.2 命名類、協定、常量和typedef結構體時考慮使用字首,主要目的是為了避免沖突。方法名存在特定類的命名空間内,無需使用字首。

2.3 方法首字母小寫(方法以大寫縮略詞開始除外);檔案夾名和類名首字母大寫。不使用下劃線作為私有方法的字首,此方式被蘋果保留。

2.4 全局常量盡量不要使用宏定義。宏很可能被重定義,而且引用不同的檔案可能會導緻宏的不同,是以盡量使用const來定義常量。

2.5 避免使用newXXX、getXXX、setXXX來命名變量和方法。

3.1 使用#pragma mark來分類方法,參考以下結構:

3.2 重載系統方法時,不要忘記先調用super的方法;比如init、viewdidload等。

3.3 屬性必須指定其類型:比如(nonatomic,strong)。

3.4 使用#import引入oc/oc++頭檔案,使用#include引入c/c++頭檔案。

3.5 盡量精簡你的公開api接口。無需公開的方法應為私有。

3.6 init和dealloc方法中避免使用self.來通路成員變量。

3.7 dealloc方法中對變量的釋放應和初始化時的順序相反。

3.8 對nsstring使用copy。

3.9 不要手動抛出objective-c的異常(但你可以嘗試捕獲異常以增加應用的健壯性)。

3.10 不同類型的強制轉換需要注意是否造成資料丢失、溢出等問題。

3.11 推薦使用@property來自動合成屬性,如非必要無需再寫@synthesize相關代碼。

注釋一般用來解釋代碼的意圖。要保持注釋和代碼同步更新,表達準确,避免誤導。盡可能寫自注釋的代碼。盡量使用單行注釋而不是塊注釋;需要文檔化的代碼可以使用vvdocumenter-xcode插件來幫助生成。

5.1 delegate對象不應該被retain,這樣做會造成retain環。

5.2 使用__weak來消除block中的retain環,例如:

5.3 蘋果官方主要推薦的是MVC的架構,其他各種流行架構也是在MVC基礎上的變種。寫代碼時需要注意model/view/controller之間的分離,保持清晰的層次關系。

<a href="https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html#//apple_ref/doc/uid/10000146-SW1">蘋果cocoa編碼指南</a>

<a href="https://google.github.io/styleguide/objcguide.xml">google objc編碼指南</a>

<a href="https://github.com/raywenderlich/objective-c-style-guide">objc編碼指南:by raywenderlich.com</a>

7.1.代碼中不能使用retain, release, retain, autorelease

7.2.不重載dealloc(如果是釋放對象記憶體以外的處理,是可以重載該函數的,但是不能調用[super dealloc])

7.3.不能使用NSAllocateObject, NSDeallocateObject

7.4.不能在C結構體中使用對象指針

7.5.id與void *間的如果cast時需要用特定的方法(__bridge關鍵字)

7.6.不能使用NSAutoReleasePool、而需要@autoreleasepool塊

7.7.不能使用“new”開始的屬性名稱 (如果使用會有下面的編譯錯誤”Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”)