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

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ò)請求類

2、圖片下載類

3、上下拉刷新

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

5、近場通信

6、第三方工具

  • 友盟
  • 百度地圖
  • 提示框(LCProgressHUD)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容