美文网首页
代码规范

代码规范

作者: 灯红酒绿映不出的落寞 | 来源:发表于2017-11-27 16:39 被阅读22次

iOS编码规范

命名

变量命名

首字母小写,驼峰法则
UI控件(描述+控件类型) priceLabel或priceLab
注释也要写 最好对齐

@property (nonatomic, strong) UIButton    *collectsImgView;          //合集 - 图标
@property (nonatomic, strong) UILabel     *collectsThemeLab;         //合集 - 主题
@property (nonatomic, strong) UILabel     *collectsAuthorLab;        //合集 - 作者

方法命名

首字母小写,驼峰法则

public method

规则: 方法用途单词_方法

一般的方法  - (void)show_editBtnOnOneViewC:(OneViewC *)oneViewC  editBtn:(UIButton *)editBtn.....
跳转       push_
更新数据    update_collectList
删除数据    delete_collectList
 

private method

规则:不加下划线 不需要and: nameStr:(NSstring)nameStr

- (void)pushOnewViewC:(OnewViewC *)onewViewC   
-             nameStr:(NSstring)nameStr {}     

扩展或封装方法

规则:以FF或ff开头 FanFan简写

 - (void)ff_editOnOneViewC:(oneViewC)oneViewC
                    isOpen:(BOOL) isOpen
    

少用#define预处理指令,多用类型常量

预处理指令命名 (字母全大写,以"_"分割)

 #define NSString * APP_ROOT_DIR @"xxx"

常量命名 (字母全大写,"k"开头)

static NSString * const kAPPROOTDIR = @"xxx";

资源文件中变量命名

全小写,""分割
模块: 开发功能模块外 nav tab login refresh share hud common(公有)
格式:“模块
类别状态描述” 状态可不要
目前版本我们以模块作为文件夹 ,后面的按照这个4个

personal_btn_un_select.png
personal_btn_name_png
nav_btn_left.png
nav_imgView_lright.png
tab_item_un_select.png
tab_item_select.png

能用糖衣语法的尽量用糖衣语法,使用时注意nil报错。

   NSMutableArray = @[].mutableCopy;
   NSString *name = dic[@"name"];
   NSArray *array= @[item1, item2];

用前缀避免命名空间冲突。大多数的自定制,都需要用前缀

比如创建有读界面

Have (文件夹)
   ViewC(文件夹)
      HaveReadViewC.h
   View
      HaveReadView.h
   Model
      HaveReadModel.h
   Cell
      HaveReadCell.h

委托Delegate的定义和使用

放在对应类的.h文件中,
命名为该类名+Delegate,

//定义代理
HaveReadViewCDelegate ==>HaveReadViewC + Delegate
HaveReadCellDelegate  ==> HaveReadCell + Delegate

//声明
@property (nonatomic, weak) id <ArticleHeadTableUrlDelegate> delegate;

//必须加判断!!!
if (_delegate && [_delegate respondsToSelector:@selector(push_safariWithUrl:)])  {
     [_delegate pushSafariWithUrl:XXXXX];
   }

```
## 注释

### 使用清晰而协调的命名方式+适当注释

```
/**
 * @beif: 执行push操作 ( 简单明了就可以)
 *
 * @prama:  namestr   名称
 * @prama:  isOpen    是否打开  0 = 关闭  1= 打开
 *
 * @discussion:  注意这个方法子啊使用时候XXXXXXXX 等等
 *
 *
*/

```
### viewC里区块划分
>h文件顶部:类的作用 类的注意一些内容
>

```
/**
  订阅合集 分2种  
         我的订阅  xxxx
         他的订阅  xxx
 */
```
>代理

```objectivec
@protocol XXXXXDelegate <NSObject>
@required
@optional
- (void)delete_nameOnOne:(类 *)one  nameStr:(NSString *) nameStr ....
```

>代码结构

```objectivec

//#pragma ------------------ LifeCycle生命周期 -----------------
//#pragma ------------------ Setter
- (void)setNameLab:(UILable *)nameLab
 {
   _nameLab = nameLab;
 }
//#pragma ------------------ Getter
- (UIButton *)nameBtn:(UIButton *) nameBtn
{
   if(!_ nameBtn){
   nameBtn = ...
     [self addSubView: nameBtn];
   }
   return  nameBtn;
}
//#pragma ------------------     Layout     ------------------
//#pragma - nameBtn
//#pragma - nameBtn - action 
//布局
- (void)layoutSubviews;
//#pragma ------------------ Plubic Method   ------------------
- (void)update_newViewC....
- (BOOL)delete_editBtn.....
//#pragma ------------------ private Method  ------------------
- (void)updateNewViewC....
- (BOOL)deleteEditBtn.....
//#pragma mark ------------- API             ------------------
//#pragma mark ------------- 代理
//#pragma ------------------ Cell            ------------------
/**
 * @brief: 设置cell
 *
 * @prama: tableView
 * @prama: model
 * @prama: indexPath
 *
 */
+( PersonalSubscribeCell *)show_cellOfTableView:(UITableView *)tableView
                                          model:(PersonalSubscribeModel *)model
                                      indexPath:(NSIndexPath *)indexPath
```

# 编程习惯
>一个原则:能不做的事情,尽量不做,尽量少唤醒CPU,绝不能在UI线程中做耗时操作(如网络请求,数据库读写,文件读写等)

## `Copy`、`mutableCopy`要注意其关联的元素是否支持

## for循环
>不要在循环中创建引用类型变量
>for循环中,用局部变量替代“array.count”

##  @autoreleasepool 

```objectivec
 @autoreleasepool{
   for(){
        @autoreleasepool{}
   }
 }
```
##  引用变量声明放在循环外面,可以避免在栈内存中创建过多引用变量

```objectivec
    UserInfo userInfo;
    // 避免循环中每次都要调用userList.count取值
    int size = userList.count;
    for (int i = 0; i < size; i++) {
        userInfo = userList[i];
        // do something...
    }
    // 推荐
    for (int i = 0, max = userList.count; i < max; i++) {
        userInfo = userList[i];
        // do something...
    }
  ```
## NSString
> 在不需要外部任意修改的情况下,全部用`Copy`

## Block

>`Block`内部需要使用外部类变量的时候,防止循环引用
>切忌在block体中使用`_name`这样的变量,请使用`self.name`

# otehr

>由于Objective-C是类型不安全的,注意加强`类型判断`、`数据越界判断`等等
> 原则上不建议拷贝代码,同一段代码拷贝3次,必须抽离出一个方法,统一调用
>所有的系统的宏,都不得在任意地方乱定义,统一在`FFConfig`文件夹下的头文件中定义,并写好注释
>ViewController中的代码要分结构,多用`#pragma mark - Life Circle`对代码进行分区,ViewController中的代码分区可分为`Life Circle`、`Request`、`Private`、`Delegate`、`Lazy`等等
>ViewController中的代码尽量不要超过`500`行,注意优化

# API
> 一级界面,API考虑离线缓存
>如果你用一句话无法将一个方法的内容表述清楚的话,这往往就意味着`API`的名字需要改进了;例如:`removeAtPoint:`就会比`remove`要清晰很多


# 提交代码规范
提交代码时的描述必须写,且简明扼要就可以
## 我们的目标是让每一位小伙伴都能欣赏我们的代码

相关文章

  • Web 端代码规范

    目录 1、代码规范概述 2、代码规范流程搭建 3、代码规范细则 1、代码规范概述 良好的代码规范能够提供软件的可读...

  • 代码规范

    代码规范 1. 概述 欢迎使用前端代码规范, 这里借鉴、引用的是京东前端代码规范。 遵循代码规范的目的在于增强团队...

  • iOS 代码规范篇

    iOS 代码规范篇 iOS 代码规范篇

  • iOS(OC)开发之随感

    1.代码规范 规范很重要!规范很重要!规范很重要! 代码规范的重要性之-为什么谷歌要执行严格的代码编写规范http...

  • 前端学习的基本总结

    目录 1.为什要遵守代码规范 2.css代码规范 3.js代码规范与设计模式3.1 js代码规范3.2 设计模式 ...

  • 乐乎项目优化

    编程: 1、代码规范。架构规范、文件组织规范、命名规范、代码逻辑规范、资源存放。 一、使用cocoapod 二、代...

  • 小肤iOS开发代码规范_v1.0

    For Objective-C , 2018.8.2 Ⅰ.前言Ⅱ.命名规范Ⅲ.代码注释规范Ⅳ.代码格式化规范Ⅴ....

  • 代码规范

    代码规范 1. 概述 欢迎使用代码规范, 这个是我借鉴京东前端代码规范,组织的内部规范。旨在增强团队开发协作、提高...

  • PSR-2- Coding Style Guide 编码风格规范

    代码风格规范 本篇规范是 PSR-1 基本代码规范的继承与扩展。 本规范希望通过制定一系列规范化PHP代码的规则,...

  • PM篇

    PM 技术篇1.开发规范命名规范,异常处理规范,日志规范,统一框架,代码commit规范,代码评审规范,统一API...

网友评论

      本文标题:代码规范

      本文链接:https://www.haomeiwen.com/subject/mcudbxtx.html