每個(gè)初學(xué)者貌似都是拿到編程入門就開始擼語法編程技巧等贞谓,要知道編程規(guī)范性也是一個(gè)很重要的點(diǎn)座每,而且琉朽,好的編程規(guī)范性或者統(tǒng)一的編程風(fēng)格會讓你的代碼更具可閱讀性與維護(hù)性域帐,這就跟從讀書開始老師就經(jīng)常叮囑字寫得整齊好看的重要性妙黍°睬郑總之就是,風(fēng)騷與效率并行(-.-)拭嫁。個(gè)人建議在邊開始學(xué)習(xí)語法內(nèi)容的時(shí)候也要邊注意下編程規(guī)范與編程風(fēng)格可免。每個(gè)公司都有不同的編程風(fēng)格要求,不過也大多差別不會很大做粤。
項(xiàng)目分組
如果項(xiàng)目比較大浇借,建議把幾個(gè)模塊拆分后類似Pod的結(jié)構(gòu)組合在一起,普通工程用主Project+Pod即可怕品。項(xiàng)目組織結(jié)構(gòu)可類似如下:
/$Pod(可選)
/$Target
/Main: AppDelegate以及Main等
/Cells: 通用Cell
/Views: 視圖類(按功能分組)
/ViewController: 控制器(按功能分組)
/Utils: 工具類
/Categories: 類拓展
/Managers: 數(shù)據(jù)業(yè)務(wù)管理類
/Model: 模型文件
/Vendors: 第三方庫
/Resources: 資源文件
/Others: pch等文件
- Cells:如果是特定Cell只用在某個(gè)TableView妇垢,可寫在同一個(gè)包括了TableView的類里
- Categories: 建議不要分散太多文件,可寫在同一個(gè)類似"NSObject+Categories.h"的類里堵泽,然后按功能劃分成多個(gè)類修己。
- Managers: 如果使用MVVM模式可劃分為DataManager、CoreDataManager迎罗、NetworkManager等
- Models: 普通模型文件/CoreData實(shí)體模型文件等
- Resources: 放置圖片與plist等設(shè)置文件睬愤,可按功能分組。
注:項(xiàng)目文件分組建議建立相應(yīng)的物理文件夾
代碼格式
注釋
編寫注釋文檔是個(gè)好習(xí)慣纹安。不僅有助于他人理解你的代碼尤辱,如果是多人開發(fā)的話,也有助于你自己回過頭去看代碼厢岂。在接口方法光督、類屬性、實(shí)例變量塔粒、宏结借、枚舉值等都應(yīng)該編寫注釋文檔,另外卒茬,在關(guān)鍵代碼或者難理解的地方也建議應(yīng)該編寫注釋船老。
Tips: VV-Document插件可以快速地生成注釋文檔格式咖熟。
命名
- 使用簡潔明了的命名,建議使用駝峰式命名柳畔,屬性與方法使用小駝峰馍管,類名使用大駝峰。
- 項(xiàng)目內(nèi)文件使用統(tǒng)一前綴薪韩,與系統(tǒng)框架區(qū)分開确沸。建議使用三個(gè)字母前綴。
- 實(shí)例變量命名使用_前綴
注意:非初始化方法建議不使用init前綴俘陷,非需要自行管理內(nèi)存的不使用create前綴罗捎,變量屬性不使用new前綴,初始化方法等建議返回instancetype
宏與常量
避免使用宏岭洲,簡單的數(shù)量等建議直接使用常量宛逗。全局宏按功能統(tǒng)一定義在全局頭文件,全局常量也建議定義在同一個(gè)或者幾個(gè)文件盾剩,可按功能劃分開雷激。內(nèi)部常量用小寫k+類名做前綴,外部常量用類名做前綴
- 內(nèi)部常量告私,格式參考:
CGFloat const kTHKAlertViewContentViewHeight = 200.0f;
- 外部常量屎暇,格式參考:
在.h定義:
extern NSString * const THKUserDidLoginNotification;
在.m中實(shí)現(xiàn):
NSString * const THKUserDidLoginNotification = @"THKUserDidLoginNotification";
聲明
聲明所在的接口應(yīng)當(dāng)盡量簡單,合模塊的功能盡量保持單一驻粟,這樣能夠盡可能地減少模塊之間的耦合程度也減少不必要的干擾根悼,所以屬性以及方法在非必要的情況下不暴露到頭文件。
- 實(shí)例變量僅在需要暴露給子類的時(shí)候在頭文件上使用@protected蜀撑。
- 屬性若非必要的情況挤巡,聲明為readonly。
- 一般只暴露immutable類型的屬性酷麦。
- 枚舉值使用NS_ENUM矿卑。
編碼風(fēng)格
建議在項(xiàng)目里保持一種編碼風(fēng)格,這樣不僅有助于代碼的維護(hù)也有助于他人閱讀代碼沃饶。要不然你一種風(fēng)格我一種風(fēng)格母廷,多人合作的時(shí)候會使得代碼看起來很混亂。在必要的地方要用空格分隔開糊肤,這樣也使得代碼琴昆,唔,更為好看風(fēng)騷馆揉。其實(shí)個(gè)人更建議按照Apple自動生成的代碼風(fēng)格去進(jìn)行編碼业舍,更能保持一致性。
實(shí)例變量或?qū)傩裕?/p>
NSObject *_object;
@property (nonatomic, strong) NSObject *object;
或者
NSObject * _object;
@property (nonatomic, strong) NSObject * object;
方法:括號可以保持各占一行上下對齊或者左括號在方法一行,右括號占一行舷暮。-
號蟋座、+
號與方法返回值之間應(yīng)該有一個(gè)空格。如果左括號在方法一行脚牍,與最后的方法名之間也應(yīng)該有一個(gè)空格。
- (void)viewDidLoad()
{
}
+ (void)load
{
}
[[THKAlertView shareInstance] show];//疏散型
或者
- (void)viewDidLoad() {
}
+ (void)load {
}
[[THKAlertView shareInstance]show];//緊密型
控制流:同方法一樣巢墅,主要是括號的風(fēng)格诸狭,如果是第一種建議也要用一下空格分隔下代碼。
if (statement) {
} else if (statement) {
} else {
}
switch (statement) {
case type1: {
break;
}
case type2: {
break;
}
default: {
break;
}
}
for (statement) {
}
或者
if (statement)
{
}
else if (statement)
{
}
else
{
}
switch (statement)
{
case type1:
{
break;
}
case type2:
{
break;
}
default:
{
break;
}
}
for (statement)
{
}
注:控制流的括號建議不要省君纫,如果代碼很少可以都放在一行驯遇。但是,不要省略蓄髓。
我是覺得按照Apple自動生成的代碼風(fēng)格作為自己的基礎(chǔ)編程風(fēng)格是個(gè)比較好的習(xí)慣叉庐。
上面就粗略地講了部分基本的,詳細(xì)的既然有很好的版本這里就不贅述了会喝。(我們不生產(chǎn)雞湯陡叠,我們只是大自然的搬運(yùn)工 *_*)
附上幾篇比較好的文檔:
Apple: Coding Guidelines for Cocoa
Google: Objective-C Style Guide
Cocoachina: Objective-C開發(fā)編碼規(guī)范