iOS開發(fā)代碼規(guī)范

  1. 關(guān)于命名
     1> 統(tǒng)一要求
    含義清楚蛆橡,盡量做到不需要注釋也能了解其作用祠够,若做不到耀石,就加注釋
    使用全稱,不使用縮寫

2> 類的命名
大駝峰式命名:每個(gè)單詞的首字母都采用大寫字母
   例子:MFHomePageViewController

后綴要求
  ViewController: 使用ViewController做后綴

   例子: MFHomeViewController

 View: 使用View做后綴

   例子: MFAlertView

 UITableCell:使用Cell做后綴

   例子: MFNewsCell

 Protocol: 使用Delegate或者DataSource作為后綴

   例子: UITableViewDelegate

 UI控件依次類推

3> 私有變量
小駝峰式命名:第一個(gè)單詞以小寫字母開始凯楔,后面的單詞的首字母全部大寫
  例子:firstName窜骄、lastName

私有變量放在 .m 文件中聲明 
 4> property變量
小駝峰式命名
   例子:///注釋

@property (nonatomic, copy) NSString *userName;

禁止使用synthesize關(guān)鍵詞

5> 宏命名
全部大寫,單詞間用 _ 分隔摆屯。[不帶參數(shù)]
  例子: #define THIS_IS_AN_MACRO @"THIS_IS_AN_MACRO"

以字母 k 開頭邻遏,后面遵循大駝峰命名。[不帶參數(shù)]
  例子:#define kWidth self.frame.size.width

小駝峰命名虐骑。[帶參數(shù)]
  #define getImageUrl(url) [NSURL URLWithString:[NSString stringWithFormat:@"%@%@",kBaseUrl,url]]

6> Enum
Enum類型的命名與類的命名規(guī)則一致

Enum中枚舉內(nèi)容的命名需要以該Enum類型名稱開頭

例子:

1 typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
2 AFNetworkReachabilityStatusUnknown = -1,
3 AFNetworkReachabilityStatusNotReachable = 0,
4 AFNetworkReachabilityStatusReachableViaWWAN = 1,
5 AFNetworkReachabilityStatusReachableViaWiFi = 2
6 };

7> Delegate命名
類的實(shí)例必須為回調(diào)方法的參數(shù)之一, 如
  -(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section

回調(diào)方法的參數(shù)只有類自己的情況准验,方法名要符合實(shí)際含義, 如:
  -(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView

以類的名字開頭(回調(diào)方法存在兩個(gè)以上參數(shù)的情況)以表明此方法是屬于哪個(gè)類的, 如:
  -(UITableViewCell)tableView:(UITableView)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

使用did和will通知Delegate已經(jīng)發(fā)生的變化或?qū)⒁l(fā)生的變化, 如:
  -(NSIndexPath)tableView:(UITableView)tableView willSelectRowAtIndexPath:(NSIndexPath)indexPath;
  -(void)tableView:(UITableView
)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath;

  1. 私有方法及變量聲明
     1> 聲明位置

在.m文件中最上方,定義空的category進(jìn)行聲明
   例子:

1 #import "CodeStandardViewController.h"
2     // 在這個(gè)category(類目)中定義變量和方法
3     @interface CodeStandardViewController ()
4     {
5
6       // 聲明私有變量
7     }
8
9      // 私有方法
10     - (void)samplePrivateMethod;
11     @end
12
13     @implementation CodeStandardViewController
14     // 私有方法的實(shí)現(xiàn)
15     - (void)samplePrivateMethod
16     {
17       //some code
18     }

  1. 關(guān)于注釋

良好的代碼把含義表達(dá)清楚 在必要的地方添加注釋廷没,在方法聲明中添加注釋糊饱。

注釋需要與代碼同步更新

如果做不到命名盡量的見名知意的話,就可以適當(dāng)?shù)奶砑右恍┳⑨尰蛘適ark

1> 屬性注釋
  例子:
    /// 學(xué)生
    @property (nonatomic, strong) Student *student;

2> 方法聲明注釋:
復(fù)制代碼
1 /**
2   * @brief 登錄驗(yàn)證
3   *
4   * @param personId 用戶名
5   * @param password 密碼
6   * @param complete 執(zhí)行完畢的block
7   *
8   * @return
9   */
10   + (void)loginWithPersonId:(NSString *)personId password:(NSString *)password complete:(void (^)(CheckLogon *result))complete;

  1. 關(guān)于UI布局
     使用Interface Builder進(jìn)行界面布局

Xib文件的命名與其對(duì)應(yīng)的.h文件保持相同

Xib文件中控件的組織結(jié)構(gòu)要合理颠黎,Xib文件中控件需要有合理的可讀性強(qiáng)的命名另锋,方便他人理解

  1. 格式化代碼
     1> 指針 "" 位置
      定義一個(gè)對(duì)象時(shí),指針 "
    " 靠近變量

例子: NSString *userName;

2> 方法的聲明和定義
  在 - 狭归、+ 和 返回值 之間留一個(gè)空格夭坪,方法名和第一個(gè)參數(shù)之間不留空格

  • (id)initWithNibName:(NSString *)nibNameOrNilbundle:(NSBundle *)nibBundleOrNil
    {...}
     3> 代碼縮進(jìn)
    使用 xcode 默認(rèn)縮進(jìn),即 tab = 4空格
    使用 xcode 中 re-indent 功能定期對(duì)代碼格式進(jìn)行整理
    相同類型變量聲明需要獨(dú)行聲明
      例子:

CGFloatoringX = frame.origin.x;
CGFloatoringY = frame.origin.y;
CGFloatlineWidth = frame.size.width;
Method與Method之間空一行
  例子:

1 #pragma mark - private methods
2
3 - (void)samplePrivateMethod
4 {...}
5
6 - (void)sampleForIf
7 {...}

4> 對(duì)method進(jìn)行分組
  使用 #pragma mark - 方式對(duì)類的方法進(jìn)行分組

例子:

復(fù)制代碼
1 #pragma mark - private methods
2
3   - (void)samplePrivateMethod
4   {...}
5
6   - (void)sampleForIf
7   {...}
8
9   - (void)sampleForWhile
10   {...}
11   
12   - (void)sampleForSwitch
13   {...}
14
15   - (void)wrongExamples
16   {...}
17
18   #pragma mark - public methods
19   - (void)samplePublicMethodWithParam:(NSString*)sampleParam
20   {...}
21
22   #pragma mark - life cycle methods
23   - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
24   {...}
25
26   - (void)viewDidLoad
27   {...}
28
29   - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
30   {...}

5> 大括號(hào)寫法
對(duì)于類的method: 左括號(hào)另起一行寫(遵循蘋果官方文檔)
   例子:

1 - (id)initWithNibName:(NSString *)nibNameOrNilbundle:(NSBundle *)nibBundleOrNil
2   {
3    self = [super initWithNibName:nibNameOrNil
4
5    bundle:nibBundleOrNil];
6
7    if (self) {
8 // Custom initialization
9 }

對(duì)于其他使用場(chǎng)景: 左括號(hào)跟在第一行后邊
  例子:

復(fù)制代碼
1 - (void)sampleForIf
2 {
3 BOOL someCondition = YES;
4 if(someCondition) {
5 // do something here
6 }
7 }
8 - (void)sampleForWhile
9 {
10 int i = 0;
11 while (i < 10) {
12 // do something here
13 i = i + 1;
14 }
15 }
16 - (void)sampleForSwitch
17 {
18 SampleEnum testEnum = SampleEnumTwo;
19 switch(testEnum) {
20 caseSampleEnumUndefined:{
21 // do something
22 break;
23 }
24 caseSampleEnumOne:{
25 // do something
26 break;
27 }
28 caseSampleEnumTwo:{
29 // do something
30 break;
31 }
32 default:{
33 NSLog(@"WARNING: there is an enum type not handled properly!");
34 break;
35 }
36 }
任何需要寫大括號(hào)的部分过椎,不得省略
  錯(cuò)誤示例:

復(fù)制代碼
1 - (void)wrongExamples
2 {
3 BOOLsomeCondition = YES;
4 if (someCondition)
5 NSLog(@"this is wrong!!!");
6 while(someCondition)
7 NSLog(@"this is wrong!!!");
8 }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末室梅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亡鼠,老刑警劉巖赏殃,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異间涵,居然都是意外死亡仁热,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門勾哩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來股耽,“玉大人,你說我怎么就攤上這事钳幅。” “怎么了炎滞?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵敢艰,是天一觀的道長。 經(jīng)常有香客問我册赛,道長钠导,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任森瘪,我火速辦了婚禮牡属,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扼睬。我一直安慰自己逮栅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布窗宇。 她就那樣靜靜地躺著措伐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪军俊。 梳的紋絲不亂的頭發(fā)上侥加,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音粪躬,去河邊找鬼担败。 笑死念祭,一個(gè)胖子當(dāng)著我的面吹牛鼠渺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播旋廷,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼朋魔,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼岖研!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤孙援,失蹤者是張志新(化名)和其女友劉穎害淤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拓售,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窥摄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了础淤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崭放。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鸽凶,靈堂內(nèi)的尸體忽然破棺而出币砂,到底是詐尸還是另有隱情,我是刑警寧澤玻侥,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布决摧,位于F島的核電站,受9級(jí)特大地震影響凑兰,放射性物質(zhì)發(fā)生泄漏掌桩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一姑食、第九天 我趴在偏房一處隱蔽的房頂上張望波岛。 院中可真熱鬧,春花似錦音半、人聲如沸则拷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽隔躲。三九已至,卻和暖如春物延,著一層夾襖步出監(jiān)牢的瞬間宣旱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工叛薯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浑吟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓耗溜,卻偏偏與公主長得像组力,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抖拴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 此文整理是為了方便一些朋友規(guī)范代碼適用于新人(ps:如果你已經(jīng)很規(guī)范的執(zhí)行了那么可以跳過此內(nèi)容)這樣以來如果有...
    無灃閱讀 370評(píng)論 0 1
  • 1. 關(guān)于命名 1.1 統(tǒng)一要求 含義清楚燎字,盡量做到不需要注釋也能了解其作用腥椒,若做不到,就加注釋 使用全稱候衍,不適用...
    wei_j閱讀 413評(píng)論 0 2
  • 1. 關(guān)于命名 1.1 統(tǒng)一要求 含義清楚笼蛛,盡量做到不需要注釋也能了解其作用,若做不到蛉鹿,就加注釋 使用全稱滨砍,不適用...
    軟件iOS開發(fā)閱讀 147評(píng)論 0 0
  • 1. 關(guān)于命名 1.1 統(tǒng)一要求 含義清楚,盡量做到不需要注釋也能了解其作用妖异,若做不到惋戏,就加注釋 使用全稱,不適用...
    EurekaFlutter閱讀 205評(píng)論 0 0
  • 青春年華他膳,期待幾多:江南煙雨如畫响逢,風(fēng)月情濃如茶。 我能想象的 無非 風(fēng)荷依依 棕孙,水蓮花的嬌羞龄句,至于遠(yuǎn)觀還是靜...
    文馨雕蟲閱讀 241評(píng)論 0 1