iOS代碼規(guī)范總結(jié)
一、命名規(guī)則:
1、文件名:全小寫,使用下劃線分割單詞,如
lib_st_idcard_scanner,
face_head.jpg .
2、類名:大寫開頭,駝峰原則,如
STIDCard,
STIDCardScanner.
3、變量名:小寫開頭,駝峰原則,類型做為前綴,如
-
局部變量:
(int) iCount, bFocus, fScore, strName, imgFace, arrFaces; -
成員變量:下劃線開頭
_iTotalNumber, _strFilePath;函數(shù)名:動(dòng)詞小寫開頭,駝峰原則,
-
自定義函數(shù):
setDetailItem ; -
系統(tǒng)函數(shù):
viewDidLoad; didReceiveMemoryWarning; -
界面響應(yīng)函數(shù)(點(diǎn)擊button的響應(yīng)):
on+按鈕名稱,onScan, onHome;
4、宏:
方法一:靜態(tài)標(biāo)志+常量標(biāo)志+數(shù)據(jù)類型+變量名
static const NSTimeInterval kAnimationDuratin = 0.3;
解析其好處:
- 用這種方式定義的常量既包含了類型信息,也不會額外耗費(fèi)預(yù)處理的資源;
- 若試圖修改const修飾符所聲明的變量,那么編譯器就會報(bào)錯(cuò),而static則表明此變量僅在定義此變量的編譯單元中可見。
方法二:
.h文件中
extern NSString *const ConstString; // extern表示聲明一個(gè)全局變量,也可修飾函數(shù)。
.m文件中
NSString *const ConstString = @"a string";
解析:
使用#define ANIMATION_DURATION 0.3會遇到的問題:
- 這個(gè)常量沒有類型信息,光從代碼字面上只可以看出和動(dòng)畫時(shí)間有關(guān);
- 預(yù)處理過程中會把碰到的所有
ANIMATION_DURATION一律替換成0.3,這樣的話假如這個(gè)宏定義在了一個(gè)類的.h文件中,那么在其他導(dǎo)入了這個(gè).h文件的類文件中,所有的ANIMATION_DURATION都會被替換; - 使用宏定義的常量可能會無意中遭人修改,從而導(dǎo)致應(yīng)用程序中各個(gè)部分所使用的值互不相同。
二、代碼注釋:
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、對象方法或類方法:
/**
* 通過圖片來提取人臉特征,ps: 此過程需 detector
* @param image 包含有人臉的圖片
* @param hDetector detector句柄,用來檢測是否存在人臉
* @param hVerify verify句柄,用來提取人臉特征
* @return 人臉特征
*/
+ (NSData *)extractFeatureWithImage:(UIImage *)image withDetector:(cv_handle_t)hDetector withVerify:(cv_handle_t)hVerify;
效果如下:

view2_2.png
更好的代碼風(fēng)格
代碼寬度
一般我們所寫的代碼最好不要太長,目前主流的代碼規(guī)范都推薦代碼寬度保持在 80 為宜,這么做當(dāng)然是有歷史原因,但在現(xiàn)在也還是有其實(shí)用價(jià)值的。因?yàn)閷⒋a寬度限制在 80,是在需要打印代碼的時(shí)候,完美適配 A4 紙的寬度。即使只是將代碼貼在個(gè)人博客或在線網(wǎng)站上,這也是最適合代碼閱讀的寬度。當(dāng)使用大屏顯示器編程時(shí),這個(gè)寬度也是很適合分屏工作的。
三、自定義公共類:
我司移動(dòng)開發(fā)組的代碼主要有g(shù)it倉庫統(tǒng)一管理,同時(shí)為了方便開發(fā),已將常用的公共庫做了統(tǒng)一管理,主要集中在iOSLibrary倉庫中上.
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ī)號格式是否正確
* @param mobileNum 輸入的手機(jī)號
* @return BOOL,返回BOOL值
*/
+ (BOOL)st_isMobileNumber:(NSString *)mobileNum;
/**
* 驗(yàn)證輸入郵箱號格式是否正確
* @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è)備類型判斷,根據(jù)屏幕的Size
* @return Device_ENUM
*/
+ (Device_ENUM)st_getDeviceTypeWithSize:(CGSize)sizeScreen;
/**
* 判斷當(dāng)前設(shè)備類型判斷,根據(jù)屏幕的Rect
* @return Device_ENUM
*/
+ (Device_ENUM)st_getDeviceTypeWithRect:(CGRect)rect;
2、PhotoTool
/**
* 獲取相冊膠卷中最后一張照片
*/
+ (void)pt_getLastestPhoto:(void(^)(UIImage *imgLastestPhoto,NSError *error))block;
/**
* 判斷是否相機(jī)授權(quán)
* @return BOOL
*/
+ (BOOL)pt_isAuthCamera;
/**
* 判斷是否相冊授權(quán)
* @return BOOL
*/
+ (BOOL)pt_isAuthPhotoLibrary;
/**
* 將視頻流數(shù)據(jù)轉(zhuǎn)化為圖片
* @param sampleBuffer 視頻流數(shù)據(jù)buffer
* @return 圖片
*/
+ (UIImage *)pt_imageFromSampleBuffer:(CMSampleBufferRef)sampleBuffer;
/**
* 將圖片轉(zhuǎn)化為無符號字符指針,主要用于FaceSDK人臉檢測
* @param image 圖片
* @return 無符號字符指針
*/
+ (unsigned char *)pt_getBGRAfromImage:(UIImage *)image;
/**
* 放大、縮小圖片
* @param size 需要的圖片大小
* @param image 源圖片
* @return UIImage,處理后的圖片
*/
+ (UIImage *)pt_imageScaledSize:(CGSize)size originalImg:(UIImage *)image;
/**
* 對圖片進(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會不會與當(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
四、第三方庫類:
1、網(wǎng)絡(luò)請求類
- AFNetworking 下載地址:AFNetworking
2、圖片下載類
- SDWebImage 下載地址:SDWebImage
3、上下拉刷新
- MJRefresh 下載地址:MJRefresh
4、數(shù)據(jù)模型解析
- MJExtension 下載地址:MJExtension
5、近場通信
- CocoaAsyncSocket 下載地址:CocoaAsyncSocket
6、第三方工具
- 友盟
- 百度地圖
- 提示框(LCProgressHUD)