代碼規(guī)范

iOS編碼規(guī)范

命名

變量命名

首字母小寫淆攻,駝峰法則
UI控件(描述+控件類型) priceLabel或priceLab
注釋也要寫 最好對齊

@property (nonatomic, strong) UIButton    *collectsImgView;          //合集 - 圖標
@property (nonatomic, strong) UILabel     *collectsThemeLab;         //合集 - 主題
@property (nonatomic, strong) UILabel     *collectsAuthorLab;        //合集 - 作者

方法命名

首字母小寫,駝峰法則

public method

規(guī)則: 方法用途單詞_方法

一般的方法  - (void)show_editBtnOnOneViewC:(OneViewC *)oneViewC  editBtn:(UIButton *)editBtn.....
跳轉       push_
更新數(shù)據(jù)    update_collectList
刪除數(shù)據(jù)    delete_collectList
 

private method

規(guī)則:不加下劃線 不需要and: nameStr:(NSstring)nameStr

- (void)pushOnewViewC:(OnewViewC *)onewViewC   
-             nameStr:(NSstring)nameStr {}     

擴展或封裝方法

規(guī)則:以FF或ff開頭 FanFan簡寫

 - (void)ff_editOnOneViewC:(oneViewC)oneViewC
                    isOpen:(BOOL) isOpen
    

少用#define預處理指令悼泌,多用類型常量

預處理指令命名 (字母全大寫,以"_"分割)

 #define NSString * APP_ROOT_DIR @"xxx"

常量命名 (字母全大寫夹界,"k"開頭)

static NSString * const kAPPROOTDIR = @"xxx";

資源文件中變量命名

全小寫馆里,""分割
模塊: 開發(fā)功能模塊外 nav tab login refresh share hud common(公有)
格式:“模塊
類別狀態(tài)描述” 狀態(tài)可不要
目前版本我們以模塊作為文件夾 ,后面的按照這個4個

personal_btn_un_select.png
personal_btn_name_png
nav_btn_left.png
nav_imgView_lright.png
tab_item_un_select.png
tab_item_select.png

能用糖衣語法的盡量用糖衣語法可柿,使用時注意nil報錯鸠踪。

   NSMutableArray = @[].mutableCopy;
   NSString *name = dic[@"name"];
   NSArray *array= @[item1, item2];

用前綴避免命名空間沖突。大多數(shù)的自定制复斥,都需要用前綴

比如創(chuàng)建有讀界面

Have (文件夾)
   ViewC(文件夾)
      HaveReadViewC.h
   View
      HaveReadView.h
   Model
      HaveReadModel.h
   Cell
      HaveReadCell.h

委托Delegate的定義和使用

放在對應類的.h文件中营密,
命名為該類名+Delegate,

//定義代理
HaveReadViewCDelegate ==>HaveReadViewC + Delegate
HaveReadCellDelegate  ==> HaveReadCell + Delegate

//聲明
@property (nonatomic, weak) id <ArticleHeadTableUrlDelegate> delegate;

//必須加判斷D慷АF捞!
if (_delegate && [_delegate respondsToSelector:@selector(push_safariWithUrl:)])  {
     [_delegate pushSafariWithUrl:XXXXX];
   }

```
## 注釋

### 使用清晰而協(xié)調(diào)的命名方式+適當注釋

```
/**
 * @beif: 執(zhí)行push操作 ( 簡單明了就可以)
 *
 * @prama:  namestr   名稱
 * @prama:  isOpen    是否打開  0 = 關閉  1= 打開
 *
 * @discussion:  注意這個方法子啊使用時候XXXXXXXX 等等
 *
 *
*/

```
### viewC里區(qū)塊劃分
>h文件頂部:類的作用 類的注意一些內(nèi)容
>

```
/**
  訂閱合集 分2種  
         我的訂閱  xxxx
         他的訂閱  xxx
 */
```
>代理

```objectivec
@protocol XXXXXDelegate <NSObject>
@required
@optional
- (void)delete_nameOnOne:(類 *)one  nameStr:(NSString *) nameStr ....
```

>代碼結構

```objectivec

//#pragma ------------------ LifeCycle生命周期 -----------------
//#pragma ------------------ Setter
- (void)setNameLab:(UILable *)nameLab
 {
   _nameLab = nameLab;
 }
//#pragma ------------------ Getter
- (UIButton *)nameBtn:(UIButton *) nameBtn
{
   if(!_ nameBtn){
   nameBtn = ...
     [self addSubView: nameBtn];
   }
   return  nameBtn;
}
//#pragma ------------------     Layout     ------------------
//#pragma - nameBtn
//#pragma - nameBtn - action 
//布局
- (void)layoutSubviews;
//#pragma ------------------ Plubic Method   ------------------
- (void)update_newViewC....
- (BOOL)delete_editBtn.....
//#pragma ------------------ private Method  ------------------
- (void)updateNewViewC....
- (BOOL)deleteEditBtn.....
//#pragma mark ------------- API             ------------------
//#pragma mark ------------- 代理
//#pragma ------------------ Cell            ------------------
/**
 * @brief: 設置cell
 *
 * @prama: tableView
 * @prama: model
 * @prama: indexPath
 *
 */
+( PersonalSubscribeCell *)show_cellOfTableView:(UITableView *)tableView
                                          model:(PersonalSubscribeModel *)model
                                      indexPath:(NSIndexPath *)indexPath
```

# 編程習慣
>一個原則:能不做的事情痢虹,盡量不做被去,盡量少喚醒CPU,絕不能在UI線程中做耗時操作(如網(wǎng)絡請求奖唯,數(shù)據(jù)庫讀寫惨缆,文件讀寫等)

## `Copy`、`mutableCopy`要注意其關聯(lián)的元素是否支持

## for循環(huán)
>不要在循環(huán)中創(chuàng)建引用類型變量
>for循環(huán)中,用局部變量替代“array.count”

##  @autoreleasepool 

```objectivec
 @autoreleasepool{
   for(){
        @autoreleasepool{}
   }
 }
```
##  引用變量聲明放在循環(huán)外面坯墨,可以避免在棧內(nèi)存中創(chuàng)建過多引用變量

```objectivec
    UserInfo userInfo;
    // 避免循環(huán)中每次都要調(diào)用userList.count取值
    int size = userList.count;
    for (int i = 0; i < size; i++) {
        userInfo = userList[i];
        // do something...
    }
    // 推薦
    for (int i = 0, max = userList.count; i < max; i++) {
        userInfo = userList[i];
        // do something...
    }
  ```
## NSString
> 在不需要外部任意修改的情況下寂汇,全部用`Copy`

## Block

>`Block`內(nèi)部需要使用外部類變量的時候,防止循環(huán)引用
>切忌在block體中使用`_name`這樣的變量,請使用`self.name`

# otehr

>由于Objective-C是類型不安全的捣染,注意加強`類型判斷`健无、`數(shù)據(jù)越界判斷`等等
> 原則上不建議拷貝代碼,同一段代碼拷貝3次液斜,必須抽離出一個方法,統(tǒng)一調(diào)用
>所有的系統(tǒng)的宏叠穆,都不得在任意地方亂定義少漆,統(tǒng)一在`FFConfig`文件夾下的頭文件中定義,并寫好注釋
>ViewController中的代碼要分結構硼被,多用`#pragma mark - Life Circle`對代碼進行分區(qū)示损,ViewController中的代碼分區(qū)可分為`Life Circle`、`Request`嚷硫、`Private`检访、`Delegate`、`Lazy`等等
>ViewController中的代碼盡量不要超過`500`行仔掸,注意優(yōu)化

# API
> 一級界面脆贵,API考慮離線緩存
>如果你用一句話無法將一個方法的內(nèi)容表述清楚的話,這往往就意味著`API`的名字需要改進了起暮;例如:`removeAtPoint:`就會比`remove`要清晰很多


# 提交代碼規(guī)范
提交代碼時的描述必須寫卖氨,且簡明扼要就可以
## 我們的目標是讓每一位小伙伴都能欣賞我們的代碼
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市负懦,隨后出現(xiàn)的幾起案子筒捺,更是在濱河造成了極大的恐慌,老刑警劉巖纸厉,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件系吭,死亡現(xiàn)場離奇詭異,居然都是意外死亡颗品,警方通過查閱死者的電腦和手機肯尺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抛猫,“玉大人蟆盹,你說我怎么就攤上這事」虢穑” “怎么了逾滥?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我寨昙,道長讥巡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任舔哪,我火速辦了婚禮欢顷,結果婚禮上,老公的妹妹穿的比我還像新娘捉蚤。我一直安慰自己抬驴,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布缆巧。 她就那樣靜靜地躺著布持,像睡著了一般。 火紅的嫁衣襯著肌膚如雪陕悬。 梳的紋絲不亂的頭發(fā)上题暖,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音捉超,去河邊找鬼胧卤。 笑死,一個胖子當著我的面吹牛拼岳,可吹牛的內(nèi)容都是我干的枝誊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼裂问,長吁一口氣:“原來是場噩夢啊……” “哼侧啼!你這毒婦竟也來了?” 一聲冷哼從身側響起堪簿,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤痊乾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后椭更,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哪审,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年虑瀑,在試婚紗的時候發(fā)現(xiàn)自己被綠了湿滓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡舌狗,死狀恐怖叽奥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情痛侍,我是刑警寧澤朝氓,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響赵哲,放射性物質(zhì)發(fā)生泄漏待德。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一枫夺、第九天 我趴在偏房一處隱蔽的房頂上張望将宪。 院中可真熱鬧,春花似錦橡庞、人聲如沸较坛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽燎潮。三九已至,卻和暖如春扼倘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背除呵。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工再菊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颜曾。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓纠拔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親泛豪。 傳聞我的和親對象是個殘疾皇子稠诲,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

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

  • iOS編程規(guī)范0規(guī)范 0.1前言 為??高產(chǎn)品代碼質(zhì)量,指導廣大軟件開發(fā)人員編寫出簡潔、可維護诡曙、可靠臀叙、可 測試、高效...
    iOS行者閱讀 4,435評論 21 35
  • 代碼格式 使用空格而不是制表符 Tab 不要在工程里使用 Tab 鍵价卤,使用空格來進行縮進劝萤。在 Xcode > Pr...
    small_Sun閱讀 1,349評論 1 3
  • Objective-C Coding Guidelines In Chinese Objective-C編碼規(guī)范,...
    爨鄉(xiāng)的云閱讀 492評論 0 0
  • 概要 Objective-C是一門面向?qū)ο蟮膭討B(tài)編程語言慎璧,主要用于編寫iOS和Mac應用程序床嫌。關于Objectiv...
    DreamMmMmM閱讀 1,148評論 0 7
  • 概要 Objective-C是一門面向?qū)ο蟮膭討B(tài)編程語言,主要用于編寫iOS和Mac應用程序胸私。關于Objectiv...
    拾丨玖閱讀 813評論 0 0