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ī)范
提交代碼時的描述必須寫卖氨,且簡明扼要就可以
## 我們的目標是讓每一位小伙伴都能欣賞我們的代碼