一、工程結(jié)構(gòu)
1、Android Studio工程結(jié)構(gòu):
Project
|-- module
|-- src
|-- main
|-- java
|-- module
|-- activity
|-- view
|-- model
|-- res
AndroidManifest.xml
|-- projectTest
|-- test
|-- libs
|-- build
build.gradle
proguard-rules.pro
build.gradle
gradle.properties
local.properties
settings.gradle
LICENSE.txt
README.txt
2、Xcode 工程結(jié)構(gòu)
Project
|-- project
|-- module
|-- controller
|-- view
|-- model
|-- bean
|-- delegate
|-- datasource
Contant
other files
|-- Pods
project.workspace
project.xcodeproj
LICENSE.txt
README.txt
二、命名規(guī)范
1、項(xiàng)目命名
以Company_項(xiàng)目名稱縮寫_平臺(tái)名稱命名,例如:XXX_MDW_iOS
2、文件命名
全部以大寫字母開頭,保持下劃線與
ViewController 以"模塊名稱+ViewController"命名,例如:MainViewController
View以"模塊名稱+View類型"命名,例如:MainSeacherButton、MainCleanView
Delegate以"模塊名稱+功能描述+Delegate"命名,例如:MainImageListDelegate
3、包命名
均為小寫字母,用作描述模塊
4、變量命名
開頭首字母小寫,遵守駝峰式命名法
控件命名以“功能描述+View類型”命名,例如:submitButton
禁止使用中立詞、表意不清詞定義變量,例如:button1、button
5、方法命名
開頭首字母小寫,遵守駝峰式命名法,例如:initUserData()
參數(shù)命名規(guī)則同變量命名規(guī)則
6、接口命名
開頭首字母大寫,以“接口描述+Interface”命名,例如:MainInterface
接口方法命名應(yīng)準(zhǔn)確標(biāo)識(shí)此方法的調(diào)用時(shí)機(jī),例如:viewDidLoad()、viewWillDidLoad()
7、block命名
開頭首字母大寫,以“block描述+Block”命名,例如:MainBlock
8、協(xié)議命名
開頭首字母大寫,以"協(xié)議描述+Protocal"命名,例如:MainProtocal
9、存取方法命名
方法名應(yīng)由以下規(guī)則組成
存方法:
setUser(User user);
取方法:
List<User> getUser();
10、緩存方法命名
開發(fā)中經(jīng)常需要本地緩存數(shù)據(jù),在此類關(guān)于緩存方法的增刪改查數(shù)據(jù)的方法命名上,應(yīng)遵循以下原則:
取方法:
List<User> getUser();
增方法:
addUser(User user)
刪方法:
removeUser(int index)
改方法:
updateUser(int index,User user)
11、常量命名
對(duì)于常量應(yīng)遵循能使用就使用枚舉的原則,在合適的頭文件中定義枚舉類型,方便本類與其他類調(diào)用時(shí)查看。
三、作用域
1、靜態(tài)方法
Java以static關(guān)鍵字修飾,Objective-C使用+字符聲明
靜態(tài)方法中不可調(diào)用非靜態(tài)方法及變量,為保證靜態(tài)方法內(nèi)部線程安全;
但可通過傳參給靜態(tài)方法,靜態(tài)方法的形參在方法內(nèi)部是線程安全的
應(yīng)在接口文件中暴露,使外部對(duì)其可見,在程序任何地方可以通過類名直接訪問靜態(tài)方法
2、靜態(tài)變量
Java以static關(guān)鍵字修飾,Objective-C使用+字符聲明
靜態(tài)變量因?yàn)榕c函數(shù)調(diào)用無關(guān),一旦生成生命周期會(huì)持續(xù)到程序結(jié)束,所以在多線程狀態(tài)下,是線程不安全的
應(yīng)在接口文件中暴露,使外部對(duì)其可見,在程序任何地方可以通過類名直接訪問靜態(tài)方法
因可能產(chǎn)生線程安全問題,所以在處理多線程狀態(tài)下的靜態(tài)變量使用時(shí),應(yīng)注意可能需要使用一些同步手段,鎖定靜態(tài)變量,應(yīng)盡量減少使用
3、全局變量
Java以public關(guān)鍵字修飾,Objective-C一般聲明為一個(gè)配置類的屬性
指的是在程序運(yùn)行時(shí),需在不同位置頻繁訪問、隨時(shí)更改的變量
全局變量因與函數(shù)調(diào)用有關(guān),當(dāng)沒有對(duì)其產(chǎn)生引用時(shí),此全局變量將可能被自動(dòng)或手動(dòng)回收,在調(diào)用其值的時(shí)候應(yīng)注意,否則可能產(chǎn)生空指針問題
4、局部變量
局部變量應(yīng)以最小作用域?yàn)橄拗?,使之在使用完后立刻可以達(dá)到回收要求,否則將產(chǎn)生不確定問題
5、私有方法
私有方法不應(yīng)在接口文件中暴露,使外部對(duì)其理論上不可見,其在當(dāng)前類文件中才可被訪問
6、公有方法
公有方法應(yīng)在接口文件中暴露,是外部對(duì)其可見的,在程序任何地方可以通過類的實(shí)例化對(duì)象訪問其公有方法
7、保護(hù)方法
保護(hù)方法應(yīng)在接口文件中暴露,對(duì)外部部分類可見,包括子孫類、同包下類使用,用的不多,應(yīng)盡量減少使用
8、私有變量
私有變量與局部變量一致,應(yīng)控制在本類運(yùn)行或本函數(shù)運(yùn)行完后即可被手動(dòng)或自動(dòng)釋放
9、公有變量(屬性)
屬性應(yīng)在接口文件中暴露,任何外部類對(duì)其是可見的,應(yīng)在主動(dòng)暴露給其他類使用時(shí)聲明,一般作為傳遞數(shù)據(jù)的接口
10、保護(hù)變量
保護(hù)變量應(yīng)在接口文件中暴露,部分外部類對(duì)其是可見的,包括子孫類、同包下類使用,用的不多,應(yīng)盡量減少使用
四、換行
1、方法括號(hào)換行
2、for循環(huán)換行
3、while循環(huán)換行
4、switch換行
5、if else換行
6、block換行
以上括號(hào)換行均應(yīng)在首行末尾起{,在末行再換一行開頭起}
五、注釋
1、類注釋
/** **************************************************************************************
* Copyright (c) [年份] [公司] All rights reserved.
* file name:[文件名稱]
* author:[作者姓名]
* email:[作者公司郵箱地址]
* date:[年月日]
* description:[類功能描述]
*/ **************************************************************************************
2、方法注釋
/** **************************************************************************************
* method name:[方法名稱]
* throw [Exception名稱] [拋出異常條件描述]
* param [paramname] [參數(shù)1中文釋意]
* param [paramname] [參數(shù)2中文釋意]
* return [paramname] [返回值中文釋意]
* author:[作者姓名]
* email:[作者公司郵箱地址]
* date:[年月日]
*/ **************************************************************************************
3、變量注釋
/**
* Parma Name:[變量名稱][變量中文釋意]
*/
4、單行注釋
/** 注釋內(nèi)容 */
5、多行注釋
/**
*
*
*/
六、其他
1、縮進(jìn)
推薦使用4個(gè)空格,禁止使用Tab,需在Xcode配置中將Tab鍵設(shè)置為輸入4個(gè)空格
2、不使用全局通知
盡量不要使用全局通知,若必須使用需單獨(dú)抽取通知識(shí)別符到統(tǒng)一配置文件中,此文件命名應(yīng)為NotifitionIdtifiers
3、黃金路徑
a)禁止書寫例如:
bool isTrue;
if(isTrue){
return true;
}else{
return false;
}
應(yīng)寫為
return isTrue;
b)在條件判斷時(shí)應(yīng)使用例如:
if(![someOther boolValue]){
return;
}
避免書寫例如:
if([someOther boolValue]){
//TODO
}else{
//TODO
}
c)在條件判斷時(shí)注意區(qū)分判斷條件關(guān)聯(lián)性。
在以下幾種判斷方式中做合理選擇
if(條件一){
//TODO
}else if(條件二){
//TODO
}else{
//TODO
}
if(條件一){
//TODO
}
if(條件二){
//TODO
}
if(條件一||條件二){
//TODO
}
if(條件一&&條件二){
//TODO
}
d)盡量不使用多層if嵌套判斷,并在多條件判斷時(shí)應(yīng)優(yōu)先使用短路算法,提高計(jì)算效率。
4、英文拼寫
推薦使用蘋果推崇的全單詞拼寫命名,按蘋果的說法“好的方法名應(yīng)當(dāng)可以以一個(gè)句子的形式朗讀出來”。減少縮寫,方便識(shí)別。
5、mark — 文檔標(biāo)記
iOS開發(fā)需在代碼中增加 #param — mark 功能歸類描述
以提高代碼瀏覽效率。
6、switch break
在使用switch做條件判斷時(shí),需要寫default分支,以免此處出現(xiàn)邏輯漏洞,導(dǎo)致后續(xù)處理異常。
7、單行字符限制
為保證正常代碼瀏覽,一行代碼不應(yīng)超過120個(gè)字符。
8、Exception
低層代碼拋出的異常務(wù)必在高層捕獲并處理。
且盡量精準(zhǔn)地拋出或捕獲異常,不應(yīng)直接處理所有異常的父類Exception。
9、Library
在使用任何Framework時(shí),必須在第三方庫(kù)與業(yè)務(wù)代碼中增加封裝層,保證不出現(xiàn)因第三方庫(kù)變化導(dǎo)致頻繁更改大量業(yè)務(wù)代碼的問題。
在開發(fā)任何Framework時(shí),應(yīng)將所有需引用的頭文件寫到一個(gè)跟Framework同名的頭文件中,用作其他工程直接引用,而不應(yīng)該讓其他工程分別引用所需的其他頭文件
10、硬編碼
關(guān)于項(xiàng)目中出現(xiàn)的既定字符串應(yīng)抽取到共同文件中,而不應(yīng)硬編碼在業(yè)務(wù)代碼中,可能造成后期版本迭代時(shí),修改上出現(xiàn)很多漏改等問題。
禁止書寫魔法數(shù)字,應(yīng)按常量定義數(shù)字代表的判斷條件。
七、小技巧
1、if else 單條件判斷成功會(huì)直接跳出,不運(yùn)行其他else判斷
例:
int a=0;
int b=1;
if(a==0){
System.out.println(a);
}else if(b==1){
System.out.println(b);
}
運(yùn)行結(jié)果:0
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。