編碼規(guī)范

制定編碼規(guī)范的原因是我們在開發(fā)和維護時候可以保持代碼風格一致盈魁,在一個項目的生命周期中,可能會有不同的人參與到開發(fā)和維護窃诉,保證了風格一致的編碼規(guī)范無疑會規(guī)避很多的風險杨耙,讓項目始終保持在一個合理和健康的狀態(tài)。

1.代碼組織
代碼實現(xiàn)中以 #Pragram mark - 來分類方法飘痛,遵循以下結構珊膜、順序

#pragram mark - Life Cycle
#pragram mark - Private Methods
#pragram mark - Public Methods
#pragram mark - Event Response
#pragram mark - UITableView Datasource
#pragram mark - UITableView Delegate
#pragram mark - Custom Accessors

2.空格
tab或4個space,保持統(tǒng)一

3.方法和條件判斷語句的大括號敦冬,總在同一行語句打開辅搬,并在新行關閉
應該

if (user.isHappy) {  
    //Do something  
} else {  
    //Do something else  
}  

不應該

if (user.isHappy)  
{  
    //Do something  
}  
else {  
    //Do something else  
}  

方法之間應該有且只有一行,這樣有利于視覺上更清晰和更易于組織。方法內(nèi)的空白應該分離功能堪遂,但通常都抽離出來一個新的方法

4.注釋
當需要注釋時候介蛉,注釋應該用來解釋這段特殊代碼為什么這么做
一般都避免是用注釋,因為代碼盡可能做到自注釋

5.命名
規(guī)則盡可能堅持長的溶褪,描述性的命名币旧。
應該:

UIButton *settingsButton;  

不應該:

UIButton *setBut;  

常量命名應該使用小寫字母k(k代表const)作為前綴,同時使用駝峰式命名規(guī)則
應該:

static NSTimeInterval const kTutorialViewControllerNavigationFadeAnimationDuration = 0.3;  

不應該:

static NSTimeInterval const fadetime = 1.7;  

類名使用駝峰式命名猿妈,首字母大寫
屬性使用駝峰式命名吹菱,首字母小寫
方法名使用駝峰式命名,首字母小寫

6.下劃線
當使用屬性的時候應該使用self.來訪問和改變彭则,這就意味著屬性和實例變量視覺效果上不同鳍刷,因為它們前邊都有self.
但是在初始化方法和和getter/setter中應該使用下劃線來避免潛在的副作用
局部變量不應該存在下劃線

7.方法
在方法簽名中,(-/+)后應該存在一個 空格俯抖,這符合Apple的風格输瓜,在參數(shù)之前包含一個具有描述性的關鍵字來描述參數(shù)》移迹“and”這個詞的用法應該保留尤揣,它不應該用于表示具有多個參數(shù)

應該:

- (void)setExampleText:(NSString *)text image:(UIImage *)image;  
- (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;  
- (id)viewWithTag:(NSInteger)tag;  
- (instancetype)initWithWidth:(CGFloat)width height:(CGFloat)height;  

不應該:

- (void)setT:(NSString *)text i:(UIImage *)image;  
- (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;  
- (id)taggedView:(NSInteger)tag;  
- (instancetype)initWithWidth:(CGFloat)width andHeight:(CGFloat)height;  
- (instancetype)initWith:(int)width and:(int)height;  // Never do this.  

8.變量
盡量以描述性的方式來命名,避免出現(xiàn)單個字符的變量命名,除了在for()循環(huán)中
*代表的是指針柬祠,格式應該是NSString *text北戏, 不應該是 NSString * text 和 NSString* text
基本類型使用NSInteger 代替int
基本類型使用CGFloat代替float

9.屬性特性
NSString, NSArray, NSDictionary應該使用copy而不是strong的屬性特性
delegate應該使用weak屬性
block使用strong屬性

10.NSString, NSDictionary, NSArray 和NSNumber在初始化時候應當盡量使用字面值。注意nil不能傳入NSArray和NSDictionary漫蛔,這樣會導致crash

應該:

NSArray *names = @[@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul"];  
NSDictionary *productManagers = @{@"iPhone": @"Kate", @"iPad": @"Kamal", @"Mobile Web": @"Bill"};  
NSNumber *shouldUseLiterals = @YES;  
NSNumber *buildingStreetNumber = @10018;  

不應該:

NSArray *names = [NSArray arrayWithObjects:@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul", nil];  
NSDictionary *productManagers = [NSDictionary dictionaryWithObjectsAndKeys: @"Kate", @"iPhone", @"Kamal", @"iPad", @"Bill", @"Mobile Web", nil];  
NSNumber *shouldUseLiterals = [NSNumber numberWithBool:YES];  
NSNumber *buildingStreetNumber = [NSNumber numberWithInteger:10018];  

11.常量
使用常量可以通過查找和替代來快速修改值嗜愈,常量盡可能使用static來代替#define

static NSString * const kAboutViewControllerCompanyName = @“www.apple.com";  
static CGFloat const kImageThumbnailHeight = 50.0;  

不應該:

#define CompanyName @“www.apple.com"  
#define thumbnailHeight 2  

12.枚舉類型

使用NS_ENUM() 代替 enum(),因為它有更強的類型檢查和代碼補全

13.init方法使用instancetype作為返回值

應該:

- (instancetype)init{   
    return [self initWithBaseURL:[NSURL URLWithString:BASE_URL]];   
}

不應該:

- (id)init{
    return [self initWithBaseURL:[NSURL URLWithString:BASE_URL]];   
}

14.條件判斷
if語句為了提高可讀性避免出錯,應該總是用大括號包圍莽龟,即使只有一樣代碼
應該:

if(!error){
     return success;
}

不應該:

if(!error)
     return success;

或:

if(!error)  return success;

同時條件判斷語句應該使用黃金路徑芝硬,左手邊的代碼應該是“golden”和“happy”的,也就是不要嵌套if語句轧房,多個返回語句也是可以的
應該:

- (void)someMethod{
     if(!success){
          return;
     }
     // Do something important
}

不應該:

- (void)someMethod{
     if(success){
     // Do something important
     }
}

待續(xù)...

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市绍绘,隨后出現(xiàn)的幾起案子奶镶,更是在濱河造成了極大的恐慌,老刑警劉巖陪拘,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厂镇,死亡現(xiàn)場離奇詭異,居然都是意外死亡左刽,警方通過查閱死者的電腦和手機捺信,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人迄靠,你說我怎么就攤上這事秒咨。” “怎么了掌挚?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵雨席,是天一觀的道長。 經(jīng)常有香客問我吠式,道長陡厘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任特占,我火速辦了婚禮糙置,結果婚禮上,老公的妹妹穿的比我還像新娘是目。我一直安慰自己谤饭,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布胖笛。 她就那樣靜靜地躺著网持,像睡著了一般。 火紅的嫁衣襯著肌膚如雪长踊。 梳的紋絲不亂的頭發(fā)上功舀,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音身弊,去河邊找鬼辟汰。 笑死,一個胖子當著我的面吹牛阱佛,可吹牛的內(nèi)容都是我干的帖汞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凑术,長吁一口氣:“原來是場噩夢啊……” “哼翩蘸!你這毒婦竟也來了?” 一聲冷哼從身側響起淮逊,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤催首,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后泄鹏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體郎任,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年备籽,在試婚紗的時候發(fā)現(xiàn)自己被綠了舶治。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖霉猛,靈堂內(nèi)的尸體忽然破棺而出尺锚,到底是詐尸還是另有隱情,我是刑警寧澤韩脏,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布缩麸,位于F島的核電站,受9級特大地震影響赡矢,放射性物質(zhì)發(fā)生泄漏杭朱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一吹散、第九天 我趴在偏房一處隱蔽的房頂上張望弧械。 院中可真熱鬧,春花似錦空民、人聲如沸刃唐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽画饥。三九已至,卻和暖如春浊猾,著一層夾襖步出監(jiān)牢的瞬間抖甘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工葫慎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留衔彻,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓偷办,卻偏偏與公主長得像艰额,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子椒涯,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

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