OC 基本代碼規(guī)范記錄

一枫夺、關(guān)于命名
1> 統(tǒng)一要求
含義清楚文判,盡量做到不需要注釋也能了解其作用胧谈,若做不到忆肾,就加注釋使用全稱,不適用縮寫
2> 類的命名

大駝峰式命名:每個單詞的首字母都采用大寫字母
例子:MFHomePageViewController
后綴要求
ViewController: 使用ViewController做后綴
例子: MFHomeViewController
View: 使用View做后綴
例子: MFAlertView
UITableCell:使用Cell做后綴
例子: MFNewsCell
Protocol: 使用Delegate或者DataSource作為后綴
例子: UITableViewDelegate

UI控件依次類推
3> 私有變量

小駝峰式命名:第一個單詞以小寫字母開始菱肖,后面的單詞的首字母全部大寫
例子:firstName客冈、lastName
以 _ 開頭,第一個單詞首字母小寫
例子:NSString * _somePrivateVariable
私有變量放在 .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類型名稱開頭
  例子:
typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
  AFNetworkReachabilityStatusUnknown = -1,
  AFNetworkReachabilityStatusNotReachable = 0,
  AFNetworkReachabilityStatusReachableViaWWAN = 1,
  AFNetworkReachabilityStatusReachableViaWiFi = 26
};

7> Delegate命名
類的實例必須為回調(diào)方法的參數(shù)之一, 如

  -(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
回調(diào)方法的參數(shù)只有類自己的情況,方法名要符合實際含義, 如:
  -(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView
以類的名字開頭(回調(diào)方法存在兩個以上參數(shù)的情況)以表明此方法是屬于哪個類的, 如:
  -(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> 聲明位置
在.m文件中最上方褒繁,定義空的category進行聲明
   例子:

#import "CodeStandardViewController.h"
// 在這個category(類目)中定義變量和方法
@interface CodeStandardViewController ()
{
      // 聲明私有變量
}
     // 私有方法
- (void)samplePrivateMethod;
@end
@implementation CodeStandardViewController
// 私有方法的實現(xiàn)
- (void)samplePrivateMethod
{
//some code
}

三. 關(guān)于注釋
 最好的代碼是不需要注釋的 盡量通過合理的命名
 良好的代碼把含義表達清楚 在必要的地方添加注釋
 注釋需要與代碼同步更新
 如果做不到命名盡量的見名知意的話亦鳞,就可以適當?shù)奶砑右恍┳⑨尰蛘適ark
1> 屬性注釋
  例子:

/** 學(xué)生 */
@property (nonatomic, strong) Student *student;

2> 方法聲明注釋:

/** 
   * @brief 登錄驗證
   *
   * @param personId 用戶名
   * @param password 密碼
   * @param complete 執(zhí)行完畢的block
   *
   * @return
   */
  + (void)loginWithPersonId:(NSString *)personId password:(NSString *)password complete:(void (^)(CheckLogon *result))complete;

四. 關(guān)于UI布局
 使用Interface Builder進行界面布局
 Xib文件的命名與其對應(yīng)的.h文件保持相同
 Xib文件中控件的組織結(jié)構(gòu)要合理,Xib文件中控件需要有合理的可讀性強的命名棒坏,方便他人理解
五. 格式化代碼 
1> 指針 "" 位置
  定義一個對象時燕差,指針 "
" 靠近變量

   例子: NSString *userName;

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

- (id)initWithNibName:(NSString *)nibNameOrNilbundle:(NSBundle *)nibBundleOrNil
{...}

3> 代碼縮進
使用 xcode 默認縮進徒探,即 tab = 4空格
使用 xcode 中 re-indent 功能定期對代碼格式進行整理
相同類型變量聲明需要獨行聲明
  例子:
CGFloatoringX = frame.origin.x;
CGFloatoringY = frame.origin.y;
CGFloatlineWidth = frame.size.width;
Method與Method之間空一行

例子:

#pragma mark - private methods

- (void)samplePrivateMethod
{...}

- (void)sampleForIf
{...}

4> 對method進行分組
  使用 #pragma mark - 方式對類的方法進行分組
   例子:

參考:


 pragma mark - private methods

  - (void)samplePrivateMethod
  {...}

  - (void)sampleForIf
  {...}

  - (void)sampleForWhile
  {...}
  - (void)sampleForSwitch
  {...}

  - (void)wrongExamples
  {...}
  #pragma mark - public methods
  - (void)samplePublicMethodWithParam:(NSString*)sampleParam
  {...}
  #pragma mark - life cycle methods
  - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  {...}
  - (void)viewDidLoad
  {...}

  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
  {...}

具體 使用下面:

#pragma mark - ---- lefe cycle 
 viewdidLoad、viewWillAppear 等系統(tǒng)生命周期 
 
#pragma mark - ---- event response 
 比如 button徽诲、tap刹帕、NSNotifaction 等 action 點擊方法 
 
#pragma mark - ---- private methods 
私有方法、 比如 建立 UI谎替、 初始化偷溺、等

#pragma mark - ---- delegate 
放Delegate 等

#pragma mark - ---- getters & setters & public 

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

- (id)initWithNibName:(NSString *)nibNameOrNilbundle:(NSBundle *)nibBundleOrNil
  {
      self = [super initWithNibName:nibNameOrNil

      bundle:nibBundleOrNil];

      if (self) {
            // Custom initialization
        }

      return self;
}

對于其他使用場景: 左括號跟在第一行后邊
  例子:

 - (void)sampleForIf
{
    BOOL someCondition = YES;
    if(someCondition) {
        // do something here
    }
}
- (void)sampleForWhile
{
    int i = 0;
    while (i < 10) {
        // do something here
        i = i + 1;
    }
}
- (void)sampleForSwitch
{
    SampleEnum testEnum = SampleEnumTwo;
    switch(testEnum) {
        caseSampleEnumUndefined:{
            // do something
            break;
        }
        caseSampleEnumOne:{
            // do something
            break;
        }
        caseSampleEnumTwo:{
            // do something
            break;
        }
        default:{
            NSLog(@"WARNING: there is an enum type not handled properly!");
            break;
        }
}

任何需要寫大括號的部分,不得省略
  錯誤示例:

- (void)wrongExamples
{
    BOOLsomeCondition = YES;
    if (someCondition)
        NSLog(@"this is wrong!!!");
    while(someCondition)
        NSLog(@"this is wrong!!!");
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钱贯,一起剝皮案震驚了整個濱河市挫掏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秩命,老刑警劉巖尉共,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異弃锐,居然都是意外死亡袄友,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門霹菊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剧蚣,“玉大人,你說我怎么就攤上這事○矗” “怎么了礼搁?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長目尖。 經(jīng)常有香客問我馒吴,道長,這世上最難降的妖魔是什么瑟曲? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任饮戳,我火速辦了婚禮,結(jié)果婚禮上测蹲,老公的妹妹穿的比我還像新娘莹捡。我一直安慰自己,他們只是感情好扣甲,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布篮赢。 她就那樣靜靜地躺著,像睡著了一般琉挖。 火紅的嫁衣襯著肌膚如雪启泣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天示辈,我揣著相機與錄音寥茫,去河邊找鬼。 笑死矾麻,一個胖子當著我的面吹牛纱耻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播险耀,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼弄喘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了甩牺?” 一聲冷哼從身側(cè)響起蘑志,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贬派,沒想到半個月后急但,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡搞乏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年波桩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片请敦。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡镐躲,死狀恐怖柏卤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匀油,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布勾笆,位于F島的核電站敌蚜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏窝爪。R本人自食惡果不足惜弛车,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒲每。 院中可真熱鬧纷跛,春花似錦、人聲如沸邀杏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽望蜡。三九已至唤崭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脖律,已是汗流浹背谢肾。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留小泉,地道東北人芦疏。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像微姊,于是被迫代替她去往敵國和親酸茴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理柒桑,服務(wù)發(fā)現(xiàn)弊决,斷路器,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • iOS編程規(guī)范0規(guī)范 0.1前言 為??高產(chǎn)品代碼質(zhì)量,指導(dǎo)廣大軟件開發(fā)人員編寫出簡潔魁淳、可維護飘诗、可靠、可 測試界逛、高效...
    iOS行者閱讀 4,464評論 21 35
  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock閱讀 3,372評論 2 36
  • 又到了這個多雨的季節(jié)息拜,不免多了一些思緒溉潭,我們每天都會遇見很多人很多事净响,很羨慕那些得過且過的人,但是有些情緒是不受控...
    mo劉大美閱讀 194評論 0 0
  • 計算機網(wǎng)絡(luò)不權(quán)威總結(jié) 歡迎閱讀 對于程序員喳瓣,網(wǎng)絡(luò)方面的知識是必不可少的馋贤,本文為大家梳理計算機網(wǎng)絡(luò)方面的主要知識體系...
    liufxlucky365閱讀 680評論 0 2