天天看點

iOS開發規範學習總結與架構搭建

iOS 開發規範

以MVC開發模式為主,根據子產品化+MVC思想

一.子產品化思想建立目錄路徑(建立真實路徑,再拖到項目中不要直接建立Group)

iOS開發規範學習總結與架構搭建
iOS開發規範學習總結與架構搭建

M —— 模型,模型對象封裝了應用程式的資料,并定義操控和處理該資料的邏輯和運算。

V —— 視圖,顯示資料,是應用程式中使用者可以看見的對象。

C —— 控制器,在應用程式的一個或多個視圖對象和一個或多個模型對象之間,控制器對象充當媒介。

SupportingFiles中主要放一下配置檔案和頭檔案

EnumHeader — 主要存放枚舉,這裡枚舉的寫法必須用OC的寫法,禁止用c的寫法

StringHeader — 主要存放title字元串(如:提示語/控制器标題等字元串資訊)

CommonHeader — 主要存放公共的配置資訊(如:宏定義/基礎設定等)

ApiHeader — 主要存放接口參數

二.基礎設定

1.xcode設定 螢幕左上角Xode->Perference->Text Editing->”Page guide at column: 80” 打上勾;每一行的代碼盡量不要超出80個字的長度,超出的回車排版, 方法名的冒号對齊

2.xcode設定 螢幕左上角Xode->Perference->Text Editing->Indentation,将Tab改成Spaces,并将Tab width和indent width設為4個空格

3.項目名稱使用英文

三.規範命名(駝峰法)

1.類命名

采用項目名簡稱+功能命名方式.首字母大寫,每個單純首字母大寫,盡量使用能夠反應類功能的名詞短語

eg: CRMApplicationController, CRMUserManage, CRMUserData

2.特殊類命名

UIKit裡的UI界面部分

控件類型直接使用尾端的駝峰單詞

eg: UIView —> xxxView

UIViewController —> xxxController

UIButton —> xxxButton

UILabel —> xxxLabel

UITableViewCell —> xxxCell

3.分類(類别)命名

與類命名相同,此外需添加擴充類名”+”

eg: NSString + Login

  1. 協定(委托)命名

    與類命名相同,此外需添加’Delegate’字尾

    eg: RMUserInfo 對 RMUserInfoDelegate

5.通知命名

通知常用于在子產品間傳遞消息,是以通知要盡可能地表示出發生的事件,通知的命名範式:[ 觸發通知的類名 ] + [Did | Will] + [ 動作 ] + Notification

eg: UIApplicationUserDidTakeScreenshotNotification

6.常量的命名最好在前面加上字母k作為标記.(全局常量(通知或者關鍵字等)盡量用const來定義. 因為如果使用宏定義, 一來宏可能被重定義. 二來引用不同的檔案可能會導緻宏的不同) 如:

(1) 定義常量

static const NSTimeInterval kAnimationDuration = 0.3;

(2).盡量使用OC的定義方式,避免C的定義方式.(命名:枚舉類型命名要加相關類名字首并且枚舉值命名要加枚舉類型字首)如:
           

typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {

UIViewAnimationTransitionNone,

UIViewAnimationTransitionFlipFromLeft,

UIViewAnimationTransitionFlipFromRight,

UIViewAnimationTransitionCurlUp,

UIViewAnimationTransitionCurlDown,

};

(3).變量和對象的命名采用修飾+類型的方式,如:
           

UILabel *titleLabel;

UIButton *confirmButton;

UIArray *modelArray;

7.執行個體變量聲明時變量名前面加下劃線“_”

UILabel _titleLabel;

8.方法命名

(1).方法一般以小寫字母打頭,每一個後續的單詞首字母大寫,方法名中不應該有标點符号(包括下劃線),有兩個例外:

a.可以用一些通用的大寫字母縮寫打頭方法,比如 PDF,TIFF 等。

b.可以用帶下劃線的字首來命名私有方法或者類别中的方法。

(2).如果方法是為了擷取對象的一個屬性值,直接用屬性名稱來命名這個方法,注意不要添加 get 或者其他的動詞字首:如:
           

// 正确,使用屬性名來命名方法

- (NSSize)cellSize;

// 錯誤,添加了多餘的動詞字首

- (NSSize)calcCellSize;

(NSSize)getCellSize;

(3).對于有多個參數的方法,務必在每一個參數前都添加關鍵詞,關鍵詞應當清晰說明參數的作用:如:
           

// 正确,保證每個參數都有關鍵詞修飾

- (void)sendAction:(SEL)aSelector toObject:(id)anObject forAllCells:(BOOL)flag;

// 錯誤,遺漏關鍵詞

- (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;

// 正确

- (id)viewWithTag:(NSInteger)aTag;

// 錯誤,關鍵詞的作用不清晰

(id)taggedView:(int)aTag;

(4).不要用 and 來連接配接兩個參數,通常 and 用來表示方法執行了兩個相對獨立的操作(從設計上來說,這時候應該拆分成兩個獨立的方法):
           

// 錯誤,不要使用 “and” 來連接配接參數

- (int)runModalForDirectory:(NSString )path andFile:(NSString )name andTypes:(NSArray *)fileTypes;

// 正确,使用 “and” 來表示兩個相對獨立的操作

- (BOOL)openFile:(NSString )fullPath withApplication:(NSString )appName andDeactivate:(BOOL)flag;

*方法的參數命名也有一些需要注意的地方 :
    和方法名類似,參數的第一個字母小寫,後面的每一個單詞首字母大寫
           

不要再方法名中使用類似 pointer,ptr 這樣的字眼去表示指針,參數本身的類型足以說明

不要使用隻有一兩個字母的參數名

不要使用簡寫,拼出完整的單詞

不适用 get 字首來表示屬性擷取方法

8.宏定義必須使用大寫命名,使用_隔開

eg: SCREEN_WIDTH

9.其他方法命名方法以類名+功能為基準

四.編碼規範

1.判斷語句(格式和判斷方式)

Preferred:

if (someObject) {

}

if (!someObject) {

}

Not preferred:
if (someObject == YES)
{
        ...
}
if (someObject != nil)
{
        ...
}
           

2.初始化推薦使用文法糖方式

數組@[@”“,@”“]

字典@{@”“:@”“,@”“:@”“}

3.回調方法(函數調用的可知性, 回調時被調用者要知道其調用者, 友善資訊的傳遞, 是以建議在回調方法中第一個參數中加上調用者)

- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

4.函數書寫

‘-’後面有個空格,第一個大括号‘{’的位置在函數所在行的末尾,同樣應該有一個空格,如果傳遞參數類型是指針,類與*号之間要有空格

eg: - (void)applicationDidEnterBackground:(UIApplication *)application {

}

5.邏輯運算符與代碼之間空一格

eg: a ++, a + b,

6.注釋(推薦使用VVDocumenter插件)

(1).所有接口類(.h)必須給出必要的注釋(接口用’//’,方法用插件’///’功能)

(2).工具類方法必須寫出明确注釋

(3).删除不必要注釋,更改代碼後及時更新注釋

(4).删除注掉的代碼和沒有意義的注釋

(5).用pragma mark - 來區分不同方法子產品

五. 注意(開發提示)

1.如果用到了Observer,至少要在dealloc裡移除掉(如果是在ARC中使用,不用調用super方法)

2.當用到addObject或insertObject時注意對NSArray,NSDictionary成員的判空保護

3.加上必要注釋(推薦安裝 VVDocumenter,進行注釋)

4.寫delegate的時候類型應該為weak弱引用,以避免循環引用

5.在适當的位置建議加上#pragma mark ,便于閱讀代碼

6.引入第三方盡量使用cocoaPod

7.不用使用new方法,盡量使用alloc init方法(因為new會在調試記憶體是出現不可預料問題,也會使人困惑)

8.NSString使用 copy屬性

9.避免相同代碼段在多個地方出現,相同代碼必須歸納出來,有必要的可以用類進行封裝

10.語句嵌套層次不得超過3層,超出的必須抽離出中間函數