关于手思3.0 代码规范

工程之始可能需要的工具:

1、使用CocoaPods类库管理工具。CocoaPods安装和使用教程。

2、下载安装注释插件VVDocumenter-Xcode。

3.使用代码对齐的Xcode插件

XAlign:XALign

ClangFormat ClangFormat-Xcode

4.快速进入沙盒目录

ZLGotoSandboxPlugin:查看沙盒的插件,当运行模拟器的时候,Shift + Common + w 直接查看当前模拟器下程序的沙盒。

一、手思项目结构管理

#pragma mark -关于手思3.0对于文件的目录要按如下结构创建:
-CategoryEx(所有类别类扩展放在里面)
-HelpMacro(项目宏定义)
-Resources (所有图片资源,声音文件,其他资源,相应资源放入相应组(Group)中)
-Utilities (工具集合,网络请求,工具类,第三方库等)
-MobileSiBuControllers(所有项目模块代码文件)
-CustomUI  (自定义UI控件)
-引用外部文件或者某个单独的功能时,放在单独的组中

关于手思3.0规范要点

1.命名规范(详见下文)
2.所有控制器继承BaseViewController  如:@interface HomeViewController : BaseViewController3.ViewController,view,model应添加前缀SB (MVC)
4.使用DLOG(<#...#>)打印而不是NSLog(..),有大量打印信息时应把DLOG注释掉
5.使用快捷键Command+shift+B,检查代码内存泄漏问题
6.所有保存数据的实体以Model结尾,如:UserModel
7.viewWillAppear,viewWillDisappear等写在viewDidLoad上面,dealloc写在.m文件最底行8.不能出现警告,过时方法用新方法替代,没有用到的变量删掉或注释掉

二、编码规范

为了提交团队合作效率,在项目开发中,对于项目、类,变量等的命名,应该要易读,易理解

一)、命名规范

关于命名的一般性的原则

1.最少字符,就是要尽量的减少命名对象的长度,尽量选择字符少的名词

2.名符其实,命名应该能直观的描述被命名对象是什么或者做什么
3.避免歧义,尽量不要采用多义词,也不要使用命名组合之后产生多义的方式
4.上下文一致,比如谓词的统一性,如果都是集合类,那么使用Remove表示删除操作,那么所有上下文就应该都用这个Remove,而不要再用Delete
5.少用缩写,除非是很常见的缩写或者项目中定义好的缩写,否则不要使用缩写
6.优先使用全局常量而非宏,应使用static方式声明常量;

主要点:控制器,自定义view以SB开头
多单词组合时,后面的单词首字母大写
如SBLoginViewCotroller,SBHomeViewCotroller
   SBPopView

鉴于目前项目使用的是MJExtensio进行字典模型自动转换,所以属性名与后台保持一致即可

(1)类命名

1、变量首字母小写,后面单词首字母大写,如userPassWord

2、使用能够反映类功能的名词短语(使用英文翻译)

3.命名时带上类型,如xxxTv,xxxView,xxxStr等

4、文件名应包含描述继承的类,如:文件名:BaseViewController   类:UIViewController
所有类名,接口名(Protocol)均以大写字母开头,多单词组合时,后面的单词首写字母大写。

如:@interface LoginViewCotroller : UIViewController
View--所有扩展自UIView的类以View结尾,如: GridView,StarView,OpenGLView,EmojiPageView。
ViewController-所有扩展自UIViewController的类以ViewController结尾,
Model--所有数据Model以Model结尾如 HomePageViewControler, LoginViewController。
如果名称太长则以VC结尾:如 AllPicturePreviewVC

4、自定义控件命名,以相应类名为后缀命名。
对于UI相关的变量,命名时要后缀以特定的控件名,如UILabel的变量命名为xxxLabel,xxxCell,其他的如xxxButton,xxxTableView,xxxImageView等;

常见类型简写如下:
UIViewController:VC    UIImage:Img  UIImageView:Iv
UIView:View  UILabel:Lbl     UIButton:Btn
UINavigationBar:NBar   UIToolBar:TBar  UISearchBar:SBar
UITextField:TF  UITextView:Tv   NSArray:Array
NSMutableArray:MArray    NSDictionary:Dict  NSMutableDictionary:MDict
NSString:Str    NSMutableString:MStr     NSSet:Set       NSMutableSet:MSet

(2)特殊类命名

举例:BaseClient、ImageStore

(3)分类(类别)命名

与类命名相同,此外需添加要扩展的类名和“+”
举例:NSString+URLEncoding

(4)协议(委托)命名

与类命名相同,此外需添加“Delegate”后缀
举例:UITableViewDelegate,MBProgressHUDDelegate

(5)方法及参数命名

方法:

首字母小写,之后每个单词首字母都大写
方法名使用动词短语,能具体表达出该方法的功能

参数:

首字母小写,之后每个单词首字母都大写
具有足够的说明性

举例:

- (void)viewWillAppear:(BOOL)animated
- (void)setupPostValue:(int)value
- (void)adjustFontWithMaxSize:(CGSize)maxSize

参数要用描述该参数的标签命名

- (void) sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;  //对
- (void) sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;               //错

当参数过长时,每个参数占用一行,以冒号对齐。如:

-(void)saveUserInfo:(NSMutableDictionary *)dictuserName:(NSString *)namepassWord:(NSString *)pwd{...
}

(6).点击事件响应(下面几种写法都可以)

-(void)loginButtonClicked  (不推荐)
-(void)loginButtonClicked:(id)sender (推荐)
或
-(void)loginButtonAction
-(void)loginButtonAction:(UIButton *)sender
-(void)backBtnAction:(id)sender手势事件
- (void)handleTapGesture:(UITapGestureRecognizer *)tapGesture

getset 开头的方法有特殊的意义,不要随意定义。

  1. set 是属性默认的设置方法,如果函数不是为了设置类成员,则不要用 set 开头,可用 setup 替代。
  2. get 和属性方法无关,但在 Cocoa 中,其标准行为是通过引用传值,而不是直接返回结果的。欲获取变量,直接以变量名为名,如:userInfomation,而不是 getUserInfomation

属性和变量申明问题

#pragma mark -变量问题
1.私有变量不应该写在h里面,h是对外公开的,更应该写到m里面
2.实例变量(成员变量),最好带上前缀下划线
3.变量需要有一定注释
4.成员变量不应少于3个字符,采取见名知义原则@interface ViewController ()
{//成员变量NSString  *_name;     //名字int       *_age;      //年龄NSString  *_passWord; //密码NSArray   *_array1;
}//属性变量
@property (nonatomic,strong) NSArray *array2;
注意点:私有属性,变量写在.m文件中,.h文件中只写对外公开的属性变量方法和变量的命令应该尽可能做到自描述。
良好的风格:
UIButton *settingsButton;不良的风格:
UIButton *setBut;

控件及数据的初始化

#pragma mark -初始化UI控件及数据源
使用initUI(或createSubview) 管理UI控件初始化,initDataSource初始化array,dict
//初始化所有UI相关
- (void)initUI
{[self initButton];[self initLabel];
}//初始化数据源
-(void)initDataSource
{NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];NSMutableArray  *pesonArray=[[NSMutableArray  alloc]initWithCapacity:0];
}- (void)initButton
{UIButton   *CSButton=[UIButton  buttonWithType:UIButtonTypeCustom];CSButton.frame=CGRectMake(100,100, 100, 80);[CSButton  addTarget:self action:nil forControlEvents:UIControlEventTouchDown];[self.view  addSubview:CSButton];
}-(void)initLabel
{UILabel  *CSLabel=[[UILabel  alloc]initWithFrame:CGRectMake(10, 10, 100, 25)];CSLabel.textAlignment=NSTextAlignmentLeft;CSLabel.font=[UIFont  systemFontOfSize:14];CSLabel.text=@"标签";
}

规范示例

#pragma mark ---规范示例 Coding Guidelines for Cocoa--
代码越简洁越明确越好,但是不能因为简洁而导致语义不明确:
代码  评价
insertObject: atIndex:  好
insert:at:              不明确,什么被插入?at指什么
removeObjectAtIndex:    好
removeObject:           好,没有之前讨论的那些问题
remove:                 不明确,什么被移除了通常,不要缩写对象的名称。即使它们很长,也全拼:
代码  评价
destinationSelection    好
destSel                 不明确
setBackgroundColor:     好
setBkgdColor:   不明确
--你可能认为某些缩写是众所周知的。但凡是无绝对,尤其是当开发者和你文化、语言背景不一样,看这些缩写就可能产生歧义。

良好的编程风格

多使用字面量语法,少用与之等价的方法(缩短源码长度,更为易读)

    良好的风格:(字面量语法)NSArray      *names = @[@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul"];NSDictionary *productManagers = @{@"iPhone" : @"Kate", @"iPad" : @"Kamal", @"Mobile Web" : @"Bill"};NSNumber *shouldUseLiterals = @YES;NSNumber *intNumber=@1;NSNumber *floatNumber=@2.5f;//取值NSString *name=names[1];NSString *product=productManagers[@"iPhone"];

    不良的风格:NSArray *names = [NSArray arrayWithObjects:@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul", nil];NSDictionary *productManagers = [NSDictionary dictionaryWithObjectsAndKeys: @"Kate", @"iPhone", @"Kamal", @"iPad", @"Bill", @"Mobile Web", nil];NSNumber *shouldUseLiterals = [NSNumber numberWithBool:YES];NSNumber *intNumber = [NSNumber numberWithInt:1];NSNumber *floatNumber = [NSNumber numberWithFloat:2.5f];\//取值NSString *name=[names objectAtIndex:1];NSString *product=[productManagers  objectForKey:@"iPhone"];

其他

性能优化
1.用  DLOG(<#...#>)代替 NSLog(...)

2.必要时使用懒加载

3.重用

代码片段
熟练使用代码片段库可以提高编码的速度。 Xcode4 中,打开一个项目并让右侧编辑区可视,然后点击右侧底部面板的第四个 {} 图标,打开代码片段库,你可以将常用的代码拖入其中。以下是一个最新的开源代码片段库链接:
https://github.com/mattt/Xcode-Snippets

参考资料
[1] 《 NYTimes Objective-C Style Guide 》 https://github.com/NYTimes/objective-c-style-guide
[2]   https://github.com/VincentSit/NYTimes-Objective-C-Style-Guide-ZH (纽约时报 移动团队 Objective-C 规范指南)
[3]   https://github.com/Chinamobo/iOS-Team-Norms (Chinamobo iOS 团队规范)

荐 Objective-C编码规范:26个方面解决iOS开发问题

转载于:https://www.cnblogs.com/sixindev/p/4444705.html

关于手思3.0 代码规范相关推荐

  1. 0基础Java 开发注意事项以及代码规范(2022最新)

    3.1 Hello World! // 这是java的快速入门,演示java的开发步骤 // 1.表示类的开始 public class Hello{// 2.编写一个main方法public sta ...

  2. eslint 保存自动格式化_代码规范之理解ESLint、Prettier、EditorConfig

    授权转载自:nowThen https://juejin.cn/post/6895889063111294990 前言 团队多人协同开发项目中困恼团队管理一个很大的问题是:无可避免地会出现每个开发者编 ...

  3. 前端代码规范文档(Vue、es6、ts、部分js)

    Vue 开发规范目录及说明 规范目的 命名规范 结构化规范 注释规范 编码规范 CSS 规范 规范目的 为提高团队协作效率,便于后台人员添加功能及前端后期项目有何迭代,以及提高自身代码质量,让大家书写 ...

  4. Vue 前端代码风格指南、代码规范

    目录 ​一.命名规范 1.1 项目文件命名 1.2 Vue 组件命名 1.3 代码参数命名 二.代码规范 2.1 Vue  主要针对vue2.x 2.2 HTML 2.3 CSS 2.4 JavaSc ...

  5. Vue代码规范(大部分适用)

    vue代码规范(公司内部使用) UI框架选择 PC端Vue项目UI框架优先选择:Element UI 文件夹.组件命名规范,组件结构规范 文件夹: 1.文件夹名称应统一格式,小驼峰命名,见名思意,其余 ...

  6. Python 代码规范

    前言 Python 学习之旅,先来看看 Python 的代码规范,让自己先有个意识,而且在往后的学习中慢慢养成习惯 目录 Python代码规范 一.简明概述 1.编码 如无特殊情况, 文件一律使用 U ...

  7. 代码规范+设计模式落地之路

    欢迎关注方志朋的博客,回复"666"获面试宝典 | 前言 刚刚与同事开了一个分享会,笔者分享了一些了代码设计模式相关的内容. 以及复盘了一下项目中有些复杂的业务场景,为什么没有很好 ...

  8. php 代码规范 工具,PHP工具篇:PHPStorm IDE使用CodeSniffer代码规范化管理

    PHPStorm IDE使用CodeSniffer进行代码规范化管理 PHP_CodeSniffer是一个优秀的代码风格检测工具,定义了一系列的代码规范(通常使用官方的代码规范标准,比如PHP的PSR ...

  9. Verilog代码规范I

    Verilog代码规范I "规范"这问题 "规范"这个富含专业气息的词汇(个人感觉),其实规范这种东西,就是大家都约定熟成的东西,一旦你不遵守这个东西,专业人士 ...

最新文章

  1. 常用的监听事件(android)
  2. Android无法访问本地服务器(localhost)的解决方案
  3. 3.2.2 快速搭建你的第一个系统所,并进行迭代
  4. 【转】 asp.net从视频文件中抓取一桢并生成图像文件的方法 实现多语言本地化应用程序 自动返回上次请求页面...
  5. 学习关于display :flex 布局问题!
  6. 从一个程序员的角度告诉你:12306有多牛逼?
  7. moel vue 自定义v_vue组件,自定义v-model方法
  8. 专访勒索组织“范本”:Thedarkoverlord 喜欢并享受辽阔的狩猎场
  9. 1104 LED Test
  10. canvas画圆形图片
  11. JavaScript随机生成信用卡卡号的方法
  12. oppo小布机器人_oppo小布小布没反应
  13. key mysql_调整MySQL中的key_reads
  14. python计算复数的辐角_python做傅里叶变换
  15. mysql周报内容范文_Mysql报表查询实例(日报|周报|月报|时间差自动计算)
  16. UE5建筑可视化室内场景模型 Evermotion – Archinteriors for UE vol. 8
  17. RISCV学习笔记5.3--ubuntu18.04芯片设计软件(vcs、verdi)的简单使用
  18. android国家码
  19. NLP(词向量、word2vec和word embedding)
  20. Linux之pstree命令

热门文章

  1. Bzoj 3343: 教主的魔法(分块+二分答案)
  2. uva10884 Persephone
  3. centos下wget时提示unable to resolve host address ...
  4. QQ 互联审核不通过问题的解决方法
  5. 一个物理学家学习Windows编程的感受
  6. 前端每日实战:142# 视频演示如何用 CSS 的 Grid 布局创作一枚小鸡邮票
  7. 通过WiFi调试android手机
  8. 「服务端」node服务的监控预警系统架构
  9. XMind助你快速解决问题
  10. Java基础学习总结(42)——Log4j 2使用教程