一. ?面布局規(guī)范
1.1 ?面布局順序
?面布局按規(guī)定順序定義, 如果沒有省略,但其他內(nèi)容保持該順序統(tǒng)一實(shí)現(xiàn)
1. #import (先標(biāo)準(zhǔn)庫(kù)頭文件,再非標(biāo)準(zhǔn)庫(kù)頭文件)
2.文件內(nèi)部定義的宏
3.常量定義
4.變量(靜態(tài)變量/靜態(tài)常量)定義
5.屬性定義
6.方法實(shí)現(xiàn)
1.1.2 標(biāo)準(zhǔn)庫(kù)定義規(guī)范
系統(tǒng)標(biāo)準(zhǔn)庫(kù)用尖括號(hào)<>, 非標(biāo)準(zhǔn)庫(kù)用雙引號(hào)"", .h文件中建議多用@class示例:
#import//標(biāo)準(zhǔn)庫(kù)引用#import"WDUserModel"http://非標(biāo)準(zhǔn)庫(kù)引用
1.2 方法實(shí)現(xiàn)布局順序
遵循重要信息寫前面原則
代碼以
#pragma mark -模塊名區(qū)分
主體可如下區(qū)分模塊,但總體順序如下
#pragma mark - Initialize
#pragma mark - Life Circle
#pragma mark - Bind
#pragma mark - Action Method
#pragma mark - Delegate(or Datasource) Method
#pragma mark - Setup UI
#pragma mark - Lazy Loading
二. 命名規(guī)范
2.1 宏定義命名規(guī)范
宏命名以大寫單詞和下橫線_組成
所有單詞全部大寫,
單詞直接以下橫線_分割正確示例:
#define SCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width
//屏幕寬度
錯(cuò)誤示例:
#define screenWidth [[UIScreen mainScreen] bounds].size.width //錯(cuò)誤:字母非全大寫,單詞不以_分割
2.2 靜態(tài)變量、靜態(tài)常量命名規(guī)范
靜態(tài)變量、靜態(tài)常量、全局變量 命名以k + 名組成, 聲明的名稱遵循駝峰命名法
正確示例:
static const NSString*kMyCellReuseID = @"kMyCellReuseID";錯(cuò)誤示例:
static const NSString*myCellReuseID = @"myCellReuseID";//錯(cuò)誤:不以字母k開頭
static const NSString*MyCellReuseID = @"MyCellReuseID";//錯(cuò)誤:不遵循駝峰命名法
2.3 成員變量命名規(guī)范
成員變量命名以 “下橫線_”開頭, 遵循駝峰命名法正確示例:
@interfaceWDHomeViewController()
{
????????NSString*_title;
}
@end
錯(cuò)誤示例:
@interfaceWDHomeViewController()
{
}
@end
NSString*title;
NSString*Type;
//錯(cuò)誤:不以下橫線_開頭//錯(cuò)誤:不遵循駝峰命名法
2.4 屬性命名規(guī)范屬性命名規(guī)范需遵循駝峰命名法
控件以對(duì)應(yīng)控件結(jié)尾, 如定義UIView控件, 則以view結(jié)尾, 定義UILabel,則
以label結(jié)尾
正確示例:
@property(nonatomic,strong) WDHomeViewModel *viewModel;
@property(nonatomic,strong)UILabel*titleLabel;
錯(cuò)誤示例:
@property(nonatomic,strong) WDHomeViewModel *ViewModel;//錯(cuò)
誤:不遵循駝峰命名法
@property(nonatomic,strong) WDHomeViewModel *VIEW_MODEL;//錯(cuò)
誤:錯(cuò)用宏定義規(guī)范
@property(nonatomic,strong) WDHomeViewModel *kViewModel;//錯(cuò)
誤:錯(cuò)用靜態(tài)常量(變量)規(guī)范
@property(nonatomic,strong)UILabel*title;//錯(cuò)誤,未以統(tǒng)一的標(biāo)識(shí)符結(jié)尾
@property(nonatomic,strong)UILabel*titleL;//錯(cuò)誤,未以統(tǒng)一
的標(biāo)識(shí)符結(jié)尾
2.5 方法命名規(guī)范
方法命名需遵循駝峰命名法取名簡(jiǎn)單, 讓人望文生義嚴(yán)禁使用拼音命名
示例:
insertObject:atIndex:好的命名
insert:at:不清晰;插入什么?“at”表示什么?
removeObjectAtIndex:好的命名
remove:不清晰:要移除什么?
2.6 文件統(tǒng)一命名規(guī)范
自定義view視圖, 以View結(jié)尾;
自定義Cell視圖, 以
Cell結(jié)尾;
自定義ViewController, 以ViewController結(jié)尾;
自定義Model, 以Model結(jié)尾;
自定義ViewModel, 以
ViewModel結(jié)尾.
...
三. 編碼格式規(guī)范3.1 指針類型編碼規(guī)范:
所有指針類型的變量或者常量 指針標(biāo)識(shí)*靠近變量或常量名正確
@property(nonatomic,strong,readonly, nullable)NSIndexPath*previouslyFocusedIndexPath;
錯(cuò)誤
@property(nonatomic,strong)UILabel* titleLabel;//錯(cuò)誤: *星
號(hào)靠UILabel
3.2 方法編碼格式規(guī)范:
方法編碼參考蘋果命名規(guī)范, 方法名后緊跟’:’,然后緊跟形參, 返回類
型’(‘與’-‘之間有一個(gè)空格
-[空格](返回值類型)方法名:(參數(shù)類型1)參數(shù)1[空格]名2:(參數(shù)類型2[空格]*)參數(shù)2;
正確
- (NSInteger)collectionView:(UICollectionView *)collectionView
numberOfItemsInSection:(NSInteger)section;
錯(cuò)誤
- (void)deployLoginInActionWithUserModel:
(WDUserModel*)userModel;//錯(cuò)誤:未遵循指針編碼規(guī)范, *)直接沒有空格-(void)deployLoginInActionWithUserModel:(WDUserModel*)userModel;//錯(cuò)誤:未遵循指針編碼規(guī)范, -(直接沒有空格
- (void)deployLoginInActionWithUserModel: (WDUserModel
*)userModel;//錯(cuò)誤:冒號(hào):和 左括號(hào)(直接有空格
- (void)deployLoginInActionWithUserModel:(WDUserModel *)
userModel;//錯(cuò)誤:變量名和右括號(hào))有空格
四. 換行規(guī)范4.1 方法名換行
*當(dāng)方法有多個(gè)參數(shù)導(dǎo)致方法名過?時(shí),使用換行使排版整?,冒號(hào)需對(duì)其示例:
- (id)initWithFrame:(NSRect)frameRect
????????????????????mode:(ind)aMode
????????????????????cellClass:(Class)factoryId
????????????????????numberOfRows:(int)rowsHigh
????????????????????numberOfColumns:(int)colsWide;
4.2 if-else 和 switch-case推薦if-else中 else if 換行, 方便注釋調(diào)試
推薦
if(index ==0) {
????????// code
}
else if{
????// codel
}
else{
// code
}
switch(cellType) {
caseWDCellTypeName1: {
// code
break;
}
caseWDCellTypeName1: {// code
break;
}
default;
break
}
五. 空行規(guī)范:
以下加重部分必須遵守
文件說明與頭文件包涵(#import)空1行。
@interface與@class之間空一行
頭文件{}里面,如果需要分類區(qū)別,各類別之間空1行;
方法完成后,空1行@end
如果需要聲明protocal,空2行接著寫。通常protocal寫在@end后面,但是聲明在
@interface前面,也可以另寫一個(gè)文件。
@synthesize與方法之間空2行。
@implementation和@synthesize之間空一行,@synthesize不要使用逗號(hào)
(,)如果需要分類區(qū)別,各類別之間空1行
各方法之間空1或2行:
若空1行,則#pragma mark - 與上一個(gè)方法}空2行;
若空2行, 則#pragma mark - 與上一個(gè)方法}空3行
六. 空格規(guī)范:
1.一元操作符如“!”、“~”、“++”、“?”、“*”、“&”(地址運(yùn)算符)等前后不
加空格。“[]”、“.”、“->”這類操作符前后不加空格
!bValue
~iValue
++iCount
*strSource
&fSum
aiNumber[i] = 5;
tBox.dWidth
tBox->dWidth
2.多元運(yùn)算符和它們的操作數(shù)之間需要一個(gè)空格
fValue= fOldValue;iNumber+= 2;
3.關(guān)鍵字之后要留空格
if、for、while等關(guān)鍵字之后應(yīng)留一個(gè)空格再跟左括號(hào)‘(’,以突出關(guān)鍵字。
4..h中成員聲明時(shí),類型與變量之間有至少1各空格。星號(hào)(*)靠近變量,不靠近類
型。(部分習(xí)慣,所有變量可以以*對(duì)?,中間留空)
NSString *titleName;intviewIndex;
5.方法名與形參不能留空格,返回類型與方法標(biāo)識(shí)符有一個(gè)空格。
方法名后緊跟’:’,然后緊跟形參, 返回類型’(‘與’-‘之間有一個(gè)空格。
- (NSInteger)collectionView:(UICollectionView *)collectionView
numberOfItemsInSection:(NSInteger)section;
6.@property后有1各空格,()里面,逗號(hào)后有1個(gè)空格,括號(hào)外,先留1個(gè)空格,再聲明
屬性
@property(strong,nonatomic)UIWindow*window;
七. 注釋規(guī)范:
7.1 注釋類型:文檔注釋, 三橫線 或者 三星號(hào)
///注釋內(nèi)容
/**
注釋內(nèi)容
*/
普通注釋, 雙斜線 或者 雙星號(hào)
//注釋內(nèi)容
/*
注釋內(nèi)容
*/
7.2 注釋規(guī)范:
.h中 @interface 必須寫文檔注釋, 標(biāo)明該類作用
///用戶數(shù)據(jù)全局上下文
@interfaceWDHomeViewController:UIViewController@end
或
/**
用戶數(shù)據(jù)全局上下文
*/
@interfaceWDHomeViewController:UIViewController
@end
.h中所有屬性和方法必須寫注釋