iOS代码规范总结

iOS代码规范总结

一、命名规则:

1、文件名:全小写,使用下划线分割单词,如

lib_st_idcard_scanner,
face_head.jpg . 

2、类名:大写开头,驼峰原则,如

STIDCard,
STIDCardScanner. 

3、变量名:小写开头,驼峰原则,类型做为前缀,如

  • 局部变量:

    (int) iCount,
    bFocus, 
    fScore,
    strName, 
    imgFace, 
    arrFaces; 
    
  • 成员变量:下划线开头

    _iTotalNumber, 
    _strFilePath; 
    

    函数名:动词小写开头,驼峰原则,

  • 自定义函数:

    setDetailItem ; 
    
  • 系统函数:

    viewDidLoad;
    didReceiveMemoryWarning;
    
  • 界面响应函数(点击button的响应):
    on+按钮名称,

    onScan,
    onHome; 
    

4、宏:

方法一:静态标志+常量标志+数据类型+变量名

static const NSTimeInterval kAnimationDuratin = 0.3;

解析其好处:

  • 用这种方式定义的常量既包含了类型信息,也不会额外耗费预处理的资源;
  • 若试图修改const修饰符所声明的变量,那么编译器就会报错,而static则表明此变量仅在定义此变量的编译单元中可见。

方法二:

.h文件中
extern NSString *const ConstString; // extern表示声明一个全局变量,也可修饰函数。

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

解析:
使用#define ANIMATION_DURATION 0.3会遇到的问题:

  • 这个常量没有类型信息,光从代码字面上只可以看出和动画时间有关;
  • 预处理过程中会把碰到的所有ANIMATION_DURATION一律替换成0.3,这样的话假如这个宏定义在了一个类的.h文件中,那么在其他导入了这个.h文件的类文件中,所有的 ANIMATION_DURATION都会被替换;
  • 使用宏定义的常量可能会无意中遭人修改,从而导致应用程序中各个部分所使用的值互不相同。

二、代码注释:

1、作用:

  • 减少同事之间的沟通成本;
  • 快速恢复代码记忆;
  • 快速生成文档。

2、使用规则:

1、实例变量和成员变量(两者注释方法相似,以实例变量介绍为主):

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

效果如下:

iOS代码规范总结_第1张图片
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;

效果如下:

iOS代码规范总结_第2张图片
view2_2.png

更好的代码风格

代码宽度
一般我们所写的代码最好不要太长,目前主流的代码规范都推荐代码宽度保持在 80 为宜,这么做当然是有历史原因,但在现在也还是有其实用价值的。因为将代码宽度限制在 80,是在需要打印代码的时候,完美适配 A4 纸的宽度。即使只是将代码贴在个人博客或在线网站上,这也是最适合代码阅读的宽度。当使用大屏显示器编程时,这个宽度也是很适合分屏工作的。

三、自定义公共类:

我司移动开发组的代码主要有git仓库统一管理,同时为了方便开发,已将常用的公共库做了统一管理,主要集中在iOSLibrary仓库中上.

1、STCommon

/**
 * 判断当前Wi-Fi是否可用
 * @return BOOL,返回BOOL值
 */
+ (BOOL)st_isWiFiEnabled;

/**
 * 获取当前设备的IP地址
 * @return NSString,设备IP,eg:192.168.2.58
 */
+ (NSString *)st_getDeviceWiFiIP;

/**
 * 当前应用的内存使用情况
 * @return double 浮点数, eg:23.3M
 */
+ (double)st_getUsedMemory;

/**
 * 当前应用的CPU使用情况
 * @return float 浮点数,百分比
 */
+ (float)st_getCpuUsage;

/**
 * 字符串转换成字典
 * @param stringJson 输入字符串
 * @return NSDictionary,字典
 */
+ (NSDictionary *)st_dictionaryWithJsonString:(NSString *)stringJson;
#warning 字典转换成字符串

/**
 * 验证输入手机号格式是否正确
 * @param mobileNum 输入的手机号
 * @return BOOL,返回BOOL值
 */
+ (BOOL)st_isMobileNumber:(NSString *)mobileNum;

/**
 * 验证输入邮箱号格式是否正确
 * @param Email 输入的邮箱
 * @return BOOL
 */
+ (BOOL)st_isEmail:(NSString *)Email;

/**
 * 获取当前设备的方向
 * @return UIDeviceOrientation.
 */
+ (UIDeviceOrientation)st_getDeviceOrientation;

/**
 * 判断当前设备是否是iPad
 * @return BOOL
 */
+ (BOOL)st_isiPad;
/**
 * 判断当前设备类型判断,根据屏幕的Size
 * @return Device_ENUM
 */
+ (Device_ENUM)st_getDeviceTypeWithSize:(CGSize)sizeScreen;

/**
 * 判断当前设备类型判断,根据屏幕的Rect
 * @return Device_ENUM
 */
+ (Device_ENUM)st_getDeviceTypeWithRect:(CGRect)rect;

2、PhotoTool

/**
 * 获取相册胶卷中最后一张照片
 */
+ (void)pt_getLastestPhoto:(void(^)(UIImage *imgLastestPhoto,NSError *error))block;

/**
 * 判断是否相机授权
 * @return BOOL
 */
+ (BOOL)pt_isAuthCamera;

/**
 * 判断是否相册授权
 * @return BOOL
 */
+ (BOOL)pt_isAuthPhotoLibrary;

/**
 * 将视频流数据转化为图片
 * @param sampleBuffer 视频流数据buffer
 * @return 图片
 */
+ (UIImage *)pt_imageFromSampleBuffer:(CMSampleBufferRef)sampleBuffer;

/**
 * 将图片转化为无符号字符指针,主要用于FaceSDK人脸检测
 * @param image 图片
 * @return 无符号字符指针
 */
+ (unsigned char *)pt_getBGRAfromImage:(UIImage *)image;

/**
 * 放大、缩小图片
 * @param size 需要的图片大小
 * @param image 源图片
 * @return UIImage,处理后的图片
 */
+ (UIImage *)pt_imageScaledSize:(CGSize)size originalImg:(UIImage *)image;

/**
 * 对图片进行裁剪
 * @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会不会与当前View交错、重叠
 * @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、网络请求类

  • AFNetworking 下载地址:AFNetworking

2、图片下载类

  • SDWebImage 下载地址:SDWebImage

3、上下拉刷新

  • MJRefresh 下载地址:MJRefresh

4、数据模型解析

  • MJExtension 下载地址:MJExtension

5、近场通信

  • CocoaAsyncSocket 下载地址:CocoaAsyncSocket

6、第三方工具

  • 友盟
  • 百度地图
  • 提示框(LCProgressHUD)

你可能感兴趣的:(iOS代码规范总结)