iOS代碼規(guī)范總結(jié)

iOS代碼規(guī)范總結(jié)

一侮东、命名規(guī)則:

1圈盔、文件名:全小寫(xiě),使用下劃線(xiàn)分割單詞悄雅,如

lib_st_idcard_scanner,
face_head.jpg . 

2驱敲、類(lèi)名:大寫(xiě)開(kāi)頭,駝峰原則煤伟,如

STIDCard,
STIDCardScanner. 

3癌佩、變量名:小寫(xiě)開(kāi)頭,駝峰原則便锨,類(lèi)型做為前綴围辙,如

  • 局部變量:

    (int) iCount,
    bFocus, 
    fScore,
    strName, 
    imgFace, 
    arrFaces; 
    
  • 成員變量:下劃線(xiàn)開(kāi)頭

    _iTotalNumber, 
    _strFilePath; 
    

    函數(shù)名:動(dòng)詞小寫(xiě)開(kāi)頭,駝峰原則放案,

  • 自定義函數(shù):

    setDetailItem ; 
    
  • 系統(tǒng)函數(shù):

    viewDidLoad;
    didReceiveMemoryWarning;
    
  • 界面響應(yīng)函數(shù)(點(diǎn)擊button的響應(yīng)):
    on+按鈕名稱(chēng)姚建,

    onScan,
    onHome; 
    

4、宏:

方法一:靜態(tài)標(biāo)志+常量標(biāo)志+數(shù)據(jù)類(lèi)型+變量名

static const NSTimeInterval kAnimationDuratin = 0.3吱殉;

解析其好處:

  • 用這種方式定義的常量既包含了類(lèi)型信息掸冤,也不會(huì)額外耗費(fèi)預(yù)處理的資源厘托;
  • 若試圖修改const修飾符所聲明的變量,那么編譯器就會(huì)報(bào)錯(cuò)稿湿,而static則表明此變量?jī)H在定義此變量的編譯單元中可見(jiàn)铅匹。

方法二:

.h文件中
extern NSString *const ConstString; // extern表示聲明一個(gè)全局變量,也可修飾函數(shù)饺藤。

.m文件中
NSString *const ConstString = @"a string";  

解析:
使用#define ANIMATION_DURATION 0.3會(huì)遇到的問(wèn)題:

  • 這個(gè)常量沒(méi)有類(lèi)型信息包斑,光從代碼字面上只可以看出和動(dòng)畫(huà)時(shí)間有關(guān);
  • 預(yù)處理過(guò)程中會(huì)把碰到的所有ANIMATION_DURATION一律替換成0.3涕俗,這樣的話(huà)假如這個(gè)宏定義在了一個(gè)類(lèi)的.h文件中罗丰,那么在其他導(dǎo)入了這個(gè).h文件的類(lèi)文件中,所有的 ANIMATION_DURATION都會(huì)被替換再姑;
  • 使用宏定義的常量可能會(huì)無(wú)意中遭人修改萌抵,從而導(dǎo)致應(yīng)用程序中各個(gè)部分所使用的值互不相同。

二元镀、代碼注釋?zhuān)?/h2>

1绍填、作用:

  • 減少同事之間的溝通成本;
  • 快速恢復(fù)代碼記憶凹联;
  • 快速生成文檔沐兰。

2哆档、使用規(guī)則:

1蔽挠、實(shí)例變量和成員變量(兩者注釋方法相似,以實(shí)例變量介紹為主):

  • 主要是的采用方式:
///view 第一種樣式注視
@property (strong, nonatomic) UIView * view1;

效果如下:

view2_1.png
  • 其它的方式:
    • 方式一:

 /** view 第二種樣式注視 */
@property (strong, nonatomic) UIView *view2;
- 方式二:

    -
@property (strong, nonatomic) UIView *view2; /** view 第三種樣式注視 */

2瓜浸、對(duì)象方法或類(lèi)方法:

/**
 *  通過(guò)圖片來(lái)提取人臉特征,ps: 此過(guò)程需 detector
 *  @param image 包含有人臉的圖片
 *  @param hDetector detector句柄,用來(lái)檢測(cè)是否存在人臉
 *  @param hVerify verify句柄,用來(lái)提取人臉特征
 *  @return 人臉特征
 */
+ (NSData *)extractFeatureWithImage:(UIImage *)image withDetector:(cv_handle_t)hDetector withVerify:(cv_handle_t)hVerify;

效果如下:

view2_2.png

更好的代碼風(fēng)格

代碼寬度
一般我們所寫(xiě)的代碼最好不要太長(zhǎng)澳淑,目前主流的代碼規(guī)范都推薦代碼寬度保持在 80 為宜,這么做當(dāng)然是有歷史原因插佛,但在現(xiàn)在也還是有其實(shí)用價(jià)值的杠巡。因?yàn)閷⒋a寬度限制在 80,是在需要打印代碼的時(shí)候雇寇,完美適配 A4 紙的寬度氢拥。即使只是將代碼貼在個(gè)人博客或在線(xiàn)網(wǎng)站上,這也是最適合代碼閱讀的寬度锨侯。當(dāng)使用大屏顯示器編程時(shí)嫩海,這個(gè)寬度也是很適合分屏工作的。

三囚痴、自定義公共類(lèi):

我司移動(dòng)開(kāi)發(fā)組的代碼主要有g(shù)it倉(cāng)庫(kù)統(tǒng)一管理叁怪,同時(shí)為了方便開(kāi)發(fā),已將常用的公共庫(kù)做了統(tǒng)一管理深滚,主要集中在iOSLibrary倉(cāng)庫(kù)中上.

1奕谭、STCommon

/**
 * 判斷當(dāng)前Wi-Fi是否可用
 * @return BOOL,返回BOOL值
 */
+ (BOOL)st_isWiFiEnabled;

/**
 * 獲取當(dāng)前設(shè)備的IP地址
 * @return NSString,設(shè)備IP涣觉,eg:192.168.2.58
 */
+ (NSString *)st_getDeviceWiFiIP;

/**
 * 當(dāng)前應(yīng)用的內(nèi)存使用情況
 * @return double 浮點(diǎn)數(shù), eg:23.3M
 */
+ (double)st_getUsedMemory;

/**
 * 當(dāng)前應(yīng)用的CPU使用情況
 * @return float 浮點(diǎn)數(shù),百分比
 */
+ (float)st_getCpuUsage;

/**
 * 字符串轉(zhuǎn)換成字典
 * @param stringJson 輸入字符串
 * @return NSDictionary,字典
 */
+ (NSDictionary *)st_dictionaryWithJsonString:(NSString *)stringJson;
#warning 字典轉(zhuǎn)換成字符串

/**
 * 驗(yàn)證輸入手機(jī)號(hào)格式是否正確
 * @param mobileNum 輸入的手機(jī)號(hào)
 * @return BOOL,返回BOOL值
 */
+ (BOOL)st_isMobileNumber:(NSString *)mobileNum;

/**
 * 驗(yàn)證輸入郵箱號(hào)格式是否正確
 * @param Email 輸入的郵箱
 * @return BOOL
 */
+ (BOOL)st_isEmail:(NSString *)Email;

/**
 * 獲取當(dāng)前設(shè)備的方向
 * @return UIDeviceOrientation.
 */
+ (UIDeviceOrientation)st_getDeviceOrientation;

/**
 * 判斷當(dāng)前設(shè)備是否是iPad
 * @return BOOL
 */
+ (BOOL)st_isiPad;
/**
 * 判斷當(dāng)前設(shè)備類(lèi)型判斷,根據(jù)屏幕的Size
 * @return Device_ENUM
 */
+ (Device_ENUM)st_getDeviceTypeWithSize:(CGSize)sizeScreen;

/**
 * 判斷當(dāng)前設(shè)備類(lèi)型判斷,根據(jù)屏幕的Rect
 * @return Device_ENUM
 */
+ (Device_ENUM)st_getDeviceTypeWithRect:(CGRect)rect;

2、PhotoTool

/**
 * 獲取相冊(cè)膠卷中最后一張照片
 */
+ (void)pt_getLastestPhoto:(void(^)(UIImage *imgLastestPhoto,NSError *error))block;

/**
 * 判斷是否相機(jī)授權(quán)
 * @return BOOL
 */
+ (BOOL)pt_isAuthCamera;

/**
 * 判斷是否相冊(cè)授權(quán)
 * @return BOOL
 */
+ (BOOL)pt_isAuthPhotoLibrary;

/**
 * 將視頻流數(shù)據(jù)轉(zhuǎn)化為圖片
 * @param sampleBuffer 視頻流數(shù)據(jù)buffer
 * @return 圖片
 */
+ (UIImage *)pt_imageFromSampleBuffer:(CMSampleBufferRef)sampleBuffer;

/**
 * 將圖片轉(zhuǎn)化為無(wú)符號(hào)字符指針,主要用于FaceSDK人臉檢測(cè)
 * @param image 圖片
 * @return 無(wú)符號(hào)字符指針
 */
+ (unsigned char *)pt_getBGRAfromImage:(UIImage *)image;

/**
 * 放大血柳、縮小圖片
 * @param size 需要的圖片大小
 * @param image 源圖片
 * @return UIImage官册,處理后的圖片
 */
+ (UIImage *)pt_imageScaledSize:(CGSize)size originalImg:(UIImage *)image;

/**
 * 對(duì)圖片進(jìn)行裁剪
 * @param rect 需要的圖片Rect
 * @param image 源圖片
 * @return UIImage,處理后的圖片
 */
+ (UIImage *)pt_imageCropedWithRect:(CGRect)rect originalImg:(UIImage *)image;

/**
 * 將圖片裁剪成圓形
 * @param borderWidth 裁剪的寬度
 * @param bgColor 背景顏色
 * @return UIImage难捌,處理后的圖片
 */
+ (UIImage *)pt_imageCircledWithBorderWidth:(CGFloat)borderWidth bgColor:(UIColor *)bgColor originalImg:(UIImage *)imageOriginal;

3攀隔、NSObject+STExtension

  • UIView
@property (assign, nonatomic) CGFloat st_width;
@property (assign, nonatomic) CGFloat st_height;

@property (assign, nonatomic) CGFloat st_x;
@property (assign, nonatomic) CGFloat st_y;

@property (assign, nonatomic) CGFloat st_centerX;
@property (assign, nonatomic) CGFloat st_centerY;

@property (assign, nonatomic) CGFloat st_right;
@property (assign, nonatomic) CGFloat st_bottom;

@property (assign, nonatomic) CGSize st_size;

+ (instancetype)st_viewFromXib;

/**
 * 判斷View會(huì)不會(huì)與當(dāng)前View交錯(cuò)、重疊
 * @param view 需要判斷的View
 * @return BOOL,返回BOOL值
 */
- (BOOL)isIntersectsRectWithView:(UIView *)view;

/**
 * 將一張圖片作為背景
 * @param str 圖片的名字
 */
- (instancetype)addsetBackgroundImageName:(NSString *)str;
  • UITextField
///占位文字顏色
@property (strong, nonatomic) UIColor *placeholderColor;
  • UIColor
+ (UIColor *)colorWithRGBHex:(UInt32)hex;
+ (UIColor *)colorWithRGBHex:(UInt32)hex r:(float)fAlpha;

4栖榨、FaceSDKTool

四昆汹、第三方庫(kù)類(lèi):

1、網(wǎng)絡(luò)請(qǐng)求類(lèi)

2婴栽、圖片下載類(lèi)

3满粗、上下拉刷新

4、數(shù)據(jù)模型解析

5愚争、近場(chǎng)通信

6映皆、第三方工具

  • 友盟
  • 百度地圖
  • 提示框(LCProgressHUD)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市轰枝,隨后出現(xiàn)的幾起案子捅彻,更是在濱河造成了極大的恐慌,老刑警劉巖鞍陨,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件步淹,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡诚撵,警方通過(guò)查閱死者的電腦和手機(jī)缭裆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)寿烟,“玉大人澈驼,你說(shuō)我怎么就攤上這事∩肝洌” “怎么了缝其?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)徘六。 經(jīng)常有香客問(wèn)我内边,道長(zhǎng),這世上最難降的妖魔是什么硕噩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任假残,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辉懒。我一直安慰自己阳惹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布眶俩。 她就那樣靜靜地躺著莹汤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颠印。 梳的紋絲不亂的頭發(fā)上纲岭,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音线罕,去河邊找鬼止潮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛钞楼,可吹牛的內(nèi)容都是我干的喇闸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼询件,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼燃乍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起宛琅,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤刻蟹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后嘿辟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體舆瘪,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年仓洼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了介陶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡色建,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舌缤,到底是詐尸還是另有隱情箕戳,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布国撵,位于F島的核電站陵吸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏介牙。R本人自食惡果不足惜壮虫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧囚似,春花似錦剩拢、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至募狂,卻和暖如春办素,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背祸穷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工性穿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雷滚。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓季二,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親揭措。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胯舷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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