IOS編碼規范

命名

Bundle id命名:

規則:采用反域名命名規則,全部使用小寫字母。一級包名為com,二級包名根據應用進行命名。

類命名:

類命采取駝峰命名規則,即首字母必須大寫,如果為詞組,則每個單詞的首字母必須大寫,類名只能使用名詞或名詞詞組;并以項目工程開頭命名,力求類名簡單 。

繼承自UIView的類以View結尾。

繼承自ViewController的類以ViewController 結尾。

保存數據的實體以Model結尾。

方法的命名:

規則:方法名第一個單詞是一個動詞,其首字母小寫,其后的所有單詞首字母大寫。

如:- (void) addNotification{}

類中常用方法命名

類的獲取方法

如果返回值為單個值,一般在頭部加上單詞“get”。如果返回值是數組或列表,要在頭部加單詞“find”

如:- (NSString*)getUserName{}、- (NSArray*)findFriends{}

類的設置方法

在被訪問字段名的前面加上前綴 set

如:- (void)setName:(NSString *)name{}

類的布爾型判斷方法

一般要求方法名使用單詞 is或has 做前綴

如:isNetWorkConnected()

構造方法應該用遞增的方式寫。

參數個數少的在前

變量命名

規則:第一個單詞首字母必須小寫,往后的單詞需要符合駝峰命名規則,即第一個字母大寫。變量名盡可能的使用名詞或名詞詞組。同樣要求簡單易懂,不允許出現無意義的單詞。

如:String *userName

其他命名規則


實例變量命名

加前綴“_”

控件變量命名

規則:一般的變量命名后加上控件名稱

IBOutlet UILabel *userNameLabel;

常量命名:

規則:必須全部大寫,單詞間用下劃線隔開。

如:MAP_KEY

異常命名:

規則:自定義異常首字母大寫,以 Exception 為結尾。

如:AppException

資源命名:

項目中所使用的所有資源命名必須以全部單詞小寫,單詞間以下劃線分割,加前綴區分。

原則:

1)采用單詞全拼,或者大家公認無岐義的縮寫(比如:nav,bg,btn等)

2)采用“模塊+功能”命名法,模塊分為公共模塊、私有模塊。公共模塊主要包括統一的背景,導航條,標簽,公共的按鈕背景,公共的默認圖等等;私有模塊主要根據app的業務

功能模塊劃分,比如用戶中心,消息中心等

btn_xx_normal ? ? ? ? ?按鈕正常情況下的效果

btn_xx_press ? ? ? ? ? ? 按鈕點擊下的效果?

bg_head? ? ? ? ? ? ? ? ? ? 背景圖片使用bg_功能_說明

def_search_cell? ? ? ? ? 默認圖片使用def_功能_說明

icon_more_help ? ? ? ? 圖標圖片使用icon_功能_說明

seg_list_line? ? ? ? ? ? ? 具有分割特征的圖片使用seg_功能_說明

sel_ok? ? ? ? ? ? ? ? ? ? ? ? 選擇圖標使用sel_功能_說明


代碼風格

整體代碼風格需要統一

Import

Import語句引入的次序如下:

IOS imports

第三方庫

自定義.h文件

在每組內部按字母排序,大寫字母排在小寫字母的前面。每個大組之間應該空一行。

空格

1. 關鍵字與其后的表達式之間需要加空格。

2. 單目操作符不應與操作數分開。

3. 除’,’外,其它雙目操作符應與它們的操作數用空格隔開。

4. 在.h中協議<>前面有一個空格。

5. 在.h中成員聲明時,類型與變量之間有至少1個空格。*號靠近變量,不靠近類型。

6. @property后留1個空格,()里面,逗號緊跟前一變量,與后一變量之間留1 個空格。()外面,先留1個空格,再聲明屬性。

7. 方法的+,-后面與()。

8. 返回類型與*之間留1個空格,方法參數中返回類型與*之間留1個空格

9. 在多參數方法中,每個參數后面都有1個空格。

10. Switch..case 語句,代碼塊需要留4個空格。

11. If語句嵌套,內部if語句需要留4個空格。

.h文件空行

以下情況要空行:

1. 頭文件包含(#import)與@class之間

2. @interface與@class之間

3. 頭文件{}內,空1行開始寫成員對象。

4. 頭文件{}外,空1行開始寫屬性。

5. 屬性與方法之間。

6. 如果需要聲明protocol,空2行接著寫。通常protocol寫在@end后面,但是聲明在@interface之前。

7. 方法與方法之間空1行。

8. 方法與@end之間。

.m文件空行

1. 文件說明與頭文件包含(#import)之間。

2. 頭文件包含(#import)之間。

3. @implementation和@synthesize之間。

4. @synthesize與方法之間。

5. 變量聲明后需要空1行。

6. 各功能塊之間。

7. #pragma mark 與方法之間。

Log

規則:統一使用自定的log服務,不直接使用系統自帶。

語句

每行只能有一個語句

每行代碼最多不得操作100個字符。

控制語句

If語句

判斷中如果有常量,則應將常量放在判斷式的右側,如if (a > b)

如:if (index > 0) …… //單條語句,放在if同一行

if (index > 0){ //多行語句

……….

}

While語句

循環語句中不允許出現表達式。

如while(I < documents.getCount())

盡可能保證.h文件的簡介性,可以不公開的API就不要公開,寫在實現文件中即可

注釋


頭文件注釋:

所有的源文件都應該在開頭有一個注釋,其中列出頭文件的相關描述、作者、以及對應的版本信息。

/*!

@header 頭文件名稱

@abstract 關于這個源代碼文件的一些基本描述

@author作者

@version 1.00 2012/01/20 Creation (此文檔的版本信息:版本號+創建時間)

*/

類注釋

每一個類都要包含如下格式的注釋,以說明當前類的功能等。

/*!

@class類名

@abstract 這里可以寫關于這個類的一些描述。

*/

枚舉注釋

每一個枚舉都需要包含相對應的enum描述,以及每個枚舉值對應的含義。

/*!

@enum枚舉名稱

@abstract 關于這個enum的一些基本信息

@constant 各個對應值得含義,如: OKButton 對應的是OK按鈕的Tag

*/

typedef NS_ENUM (NSInteger,RunGoalTypeE){

kRunGoalTypeNone= 0,//無目標

kRunGoalTypeTime= 1,//以時間為目標

kRunGoalTypeDistance= 2,//以距離為目標

kRunGoalTypeCalori= 3,//以消耗卡路里為目標

};

協議注釋

協議需要注明是哪個類對應的protocol,以及自身的相關描述。

/*!

@protocol 協議名稱

@abstract 這是哪個類的protocol

@discussion 具體描述信息

*/

方法注釋

包括當前方法的用途,當前方法參數的含義,當前方法返回值的內容和對應的錯誤參照。

/*!

@method 方法名

@abstract該方法的一些簡要描述

@discussion該方法的具體使用方式,需要注意的地方,如果你是設計一個抽象類或者一個共通類給給其他類繼承的話,在這里需要具體描述一下怎樣使用這個方法。

@param text參數列表

@param error 錯誤參照

@result 返回結果

*/

屬性注釋

/*!

@property 屬性名稱

@abstract 該Property的一些基本描述。

*/

類別注釋

/*!

@category 類別名稱

@abstract 哪個類的類別

*/


文件組織結構

1. 類文件組織

建議邏輯結構和物理結構保持一致,以便有效地管理文件

基于MVC設計模式原則,至少要保證controller與數據處理,網絡請求相對獨立

基于功能模塊原則,功能模塊分包括數據/網絡處理,UI前端界面兩部分,數據/網絡處理應該在數據/網絡處理的框架下,而UI前端界面比如用戶中心,消息中心,它們的專有的controller,view等應該在屬于文件夾。還會遇到一些公共的view,可以開辟出公共的文件夾來管理

在實際中使用中, 可以結合項目特點靈活使用,但基本的原則一定要保持,保持良好的類文件組織結構,對團隊有益無害。

2. 圖片資源文件組織

圖片資源文件,強烈建議采用Images.xcassets管理,盡量少用自己創建的文件夾管理。

使用Images.xcassets的優勢很多,具體可以查閱讀相關文獻資料,這里只從工程管理上說一點,在Images.xcassets中添加圖片資源,不會對project文件造成改變,而直接在文件夾里添加圖片文件,每次都會對project文件造成改變,因此使用Images.xcassets管理圖片資源可以減少project沖突的次數。

2. 類代碼組織

一個原則:析構函數- (void)dealloc最好放到類最上面,第一眼就可以看到這個方法,可以方便看到是否remove了。一些操作,對內存的合理釋放等,controller,view的生命周期函數放到最上面,自己實現的方法在下面,相同/相近功能的方法采用#pragma mark -來標記,以便查看。

修改規范

新增代碼行

新增代碼行的前后應有注釋行說明。

//修改人,修改時間,修改說明

新增代碼行

//修改結束

刪除代碼行

刪除代碼向的前后用注釋行說明

//修改人,修改時間,修改說明

要刪除的代碼行(將要刪除的語句進行注釋)

//修改結束

修改代碼行

修改代碼行以注釋舊代碼行后再新增代碼行的方式進行。

//修改人,修改時間,修改說明

//修改前代碼行開始

//修改前代碼行

//修改前代碼行結束

//修改后代碼行開始

修改后代碼行

//修改結束

避免出現的情況

永遠不要有空的catch語句。替代方案:向方法的調用者拋出異常、或者抽象級別拋出新異常。

避免在一條語句中給多個變量賦相同的值

不要將賦值運算符用在與相等運算符混淆的地方

重復代碼,復制-粘貼

長方法,將所有邏輯處理放在一個方法里面,每個方法都應有其自己的意圖

大類,妄想將所有模塊放在一個類中實現。

小類,一個類所承擔的責任太少,應該將其消除,類的維護需要額外的開銷


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容

  • 注釋規范 文件頭注釋 文件頭注釋采用如下格式,該注釋由xcode自動生成。如果你對其他人的原始代碼作出重大的修改,...
    yangzming閱讀 733評論 0 1
  • 以下所有純屬個人習慣,不喜勿噴 語言:應該使用美國英語命名 如 UIColor *myColor = [UICol...
    夾娃娃達人閱讀 312評論 0 0
  • Object-C 開發代碼規范概要Object-C是一門面向對象的動態編程語言,主要用于編寫IOS和MAC應用程序...
    克魯德李閱讀 541評論 0 1
  • 面試被問到公司編碼規范問題,感覺有很多東西,但是不知道該怎么說出來,今天突然找到 李明杰 老師的一份編碼規范。重新...
    Dombo_Y閱讀 977評論 1 2
  • 遇見你之前,她不相信一見鐘情,遇見你之后,她滿心歡喜,眉梢眼角露笑意。 周瑩被養父賣到沈家當丫鬟,一開始她受到沈家...
    南湘紫閱讀 1,386評論 51 51