• iOS代码规范(OC和Swift)


    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下。

    相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button1、button2、button3,全文没有注释,去看代码逻辑才能知道这三个按钮的意思,我也是醉了!

    下面的规范 有的定的比较死,大家可以根据自己团队的风格进行修改。该文章主要是OC的代码规范,有几个是Swift的规范。

    OC和Swift的代码规范如下:

    一、VC生命周期 模块排列顺序

    1、 注意

    #pragma mark -(加横线)是用来 区分大模块的,首字母要大写。

    #pragma mark(不加横线)是标注 小模块的, mark与函数第一行不要有空行,没有的模块不用写mark。

    2、基本标准

    #pragma mark - Life Cycle

    viewDidLoad前的

    viewDidLoad

    viewDidLoad后的

    dealloc

    #pragma mark - (系统提供的delegate)

    #pragma mark - (自定义的delegate)

    #pragma mark - (第三方的delegate)

    #pragma mark - Event response // 这里主要放IBAction,通知,gesture等

    #pragma mark - Public method

    #pragma mark - Private method

    #pragma mark - Getters and Setters

    3、项目中常用到的

    #pragma mark - Life Cycle

    #pragma mark - Override

    #pragma mark - UITableViewDelegate

    #pragma mark - CustomDelegate

    #pragma mark - Event Response

    #pragma mark - Public Methods

    #pragma mark - Getters and Setters

    二、VC里都要 加入 dealloc 方法

    如果退出该页面,没有执行dealloc 方法,就是存在内存泄露的问题,所以都加上dealloc方法,并打印日志。养成习惯。

    三、控件统一后缀名

    1、常用的后缀名规则

    除了下面几个进行浓缩,其他的只去掉UI 就可以了(如UITextField写成:TextField):

    UIButton :Btn

    UILabel :Lbl

    UITableViewCell :Cell

    Image :Img

    UIViewController: VC

    UITableViewController :TableVC

    2、其他

    2.1、新建一个UIViewController 文件 后缀要 ViewController

    2.2、新建一个UITableViewController 文件后缀要 ViewController

    2.3、多个tag :用 枚举 定义, 后缀:Tag

    四、统一方法名

    这个规范是为了大家看每个页面,一看就知道那个方法是做什么的,每个团队都应该根据自己的特点来定制。

    如果团队中有几个人的命名很不规范(写的方法名都看不懂),就需要按这条进行统一命名。如果团队的成员都能很好的命名 这条就可以省略。

    1、初始化所有控件 统一一个方法名:initAllView

    2、初始化数据 的方法名:initData

    3、请求网络,统一方法名前缀

    vc 里 只有一个网络请求::loadNetData

    多个 加后缀:load****NetData

    4、网络层的类加后缀: ***Request

    5、Model 都要加后缀Model。。

    6、点击事件的前缀:tap

    五、文件#import和@end

    1、import规整顺序, @end后留1个回车位置, @end前最后一个函数空1行

    2、先 import类本身.h 再<>,之后”",include写在一起

    #import “AppDelegate.h"

    #import <arpa/inet.h>

    #import "OpenUDID.h"

    六、换行与括号

    1、多个协议名称过长不用换行 依靠xcode自动伸缩。

    2、方法 没有参数或参数在一行,后面括号 不要换行,如:- (id)responseObject {。

    方法有多个参数,参数换行,括号换行,如:

    - (AFHTTPRequestOperation *)PUT: (NSString *)URLString
                 parameters:(id)parameters
                    success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                    failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
    
    {
    }

    七、@property规范

    1、weak , copy的使用要多注意, NSArray ,NSdictionary, NSString 属性定义尽量用copy,这是为了防止赋值给它的是可变的数据,如果可变的数据发生了变化,那么该property也会发生变化。

    2、变量先按功能分类摆放再按类型摆放,可考虑右对齐

    八、Define模块

    1、每个define按模块分类后, 照字母自然顺序排序

    九、Typedef的规范

    可以多选判断的时候要用下面的格式:

    typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) {
        SDWebImageRetryFailed = 1 << 0,
        SDWebImageLowPriority = 1 << 1,
        SDWebImageCacheMemoryOnly = 1 << 2,
        SDWebImageProgressiveDownload = 1 << 3,
        SDWebImageRefreshCached = 1 << 4,
        SDWebImageAvoidAutoSetImage = 1 << 11
    };
    

    十、常用命名规则

    1、 类,方法命名

    类名首字母大写,方法首字母小写,方法中的参数首字母小写,第二个参数名开始不要加"with", -, +号后面由一个空格

    同时尽量让方法的命名读起来像一句话,能够传达出方法的意思

    同时取值方法前不要加前缀“get”

    手势带"tapGesture"、"tap"类似的,通知前缀"notification"、“note”类似的, 后面不用带_

    2、变量命名

    意思完整性, 变量的命名btn, img类型在特征词最后,如 softBtn, homeVc, redImg

    3、图片目录和命名

    btn按钮的图,默认按下高亮为普通状态图片名称最后带上后缀 “_h"

    一级目录(功能)_二级目录(是btn还是img)_三级目录(特征),如goodlist_btn_greenArrow

    十一、调试用法

    1、TODO

    临时处理方案或者未做的实现 加TODO。

    2、NSAssert

    使用断言NSAssert来跟踪异常: NSAssert(theDate != nil, @"Argument must be non-nil”);

    3、Instruments

    检查自己模块的内存、占用时间、CPU、GPU等使用情况。

    十二、要注意的

    1、初始化”id" 写成 "instancetype"

    2、int 用NSInteger,float用CGFloat

    3、”:" 后别加空格, 函数第一个大括号不要换行

    4、static const NSString * kLNasss = @""";

    5、只要出现“,” 后面肯定要写一个空格

    6、注释灵活处理,复杂方法需要解释清楚

    7、无关的方法,变量都放到.m里

    8、尽量别直接使用数字,字符串赋值,除非后面带上说明该值来历

    9、 固定 的 字符串、数字 。如果 只有一处用了,就写死。尽量 注释。

    如果一个页面用多次,就在这个页面定义 define

    如果多个页面 使用(多个地方 需要同时修改) 就定义成常量

    10、if else 的问题。

    //这里写整体的注释

    if () {
    
    } else { //这里写不写都行
    
    }

    十三、使用block要注意循环引用

    虽然局部变量大多数里面的self不用weak也不会引起循环引用(tableview展示cell的时候例外cellForRowAtIndexPath),但是还是推荐大家都加上__weak。

    十四、reviewboard的使用流程

    先打diff、再把diff 提交 reviewboard、 再提交svn(打标签的时候带CR:版本)

    十五、重要的公用功能 .h 用的注释格式:

    /**
    *
    *
    */

    这样写可以用快捷键查看注释的内容 ,一般的不用这样写。。

    十六、scrollViewDidScroll

    重写 scrollViewDidScroll 方法的页面 ,要在dealloc中将scrollview.delegate = nil 。。否则 点击返回键会崩溃。 iOS 9 修复了 scrollViewDidScroll崩溃的问题。

    十七、Swift文件里 打印日志 用print, 一定不能用NSLog

    因为Swift 用NSLog 会记录到系统日志,可以被黑客获取。

    用宏定义来屏蔽release环境下的NSLog日志输出 对 Swfit是没用的。

    欢迎关注 今日头条号 名称: 云端梦想科技  

    欢迎关注 微信公众号:dreams2999

  • 相关阅读:
    系统环境变量
    Shell入门(三)之字符串
    Shell入门(二)之变量
    Shell入门(一)之简介
    Spring入门(三)之IoC
    Spring入门(二)之下载与安装
    Spring入门(一)之简介
    面向对象与面向过程
    Hadoop入门(二)集群安装
    Hadoop入门(一)概念与单机安装
  • 原文地址:https://www.cnblogs.com/dahe007/p/6255268.html
Copyright © 2020-2023  润新知