我的iOS代码习惯

分三大块:命名, 注释,类内分块结构写法

命名

一切的命名都是驼峰命名规则

前缀

所有类名、枚举、结构、 protocol 定义时,都加上全大写的 MT作为前缀,MT是我们项目马踏飞燕的两个字,大家都这样写,所以取名"MT",有些两个字母的可能会被苹果内定,所以取名三个字母

后缀

所#有 protocol 定义时,都加上后缀 Delegate 。如, MTRefreshViewDelegate ,表示 MTRefreshView 的协议

方法命名

方法名首字母小写,其他单词首字母大写,每个空格分割的名称以动词开头。如:

- (void)insertModel:(id)modelatIndex:(NSUInteger)atIndex;

属性、变量命名

每个属性命名都加上类型后缀,如,按钮就加上 Button 后缀,模型就加上 Model 后缀。eg:

@property (nonatomic, strong) UIButton *submitButton;

bool属性命名


/** 是否隐藏底部线条 YES 隐藏 NO 显示 */
@property (nonatomic,assign,getter=isLineHidden) BOOL lineHidden;

无论是方法命名还是属性命名都要遵循驼峰命名法规则。
新版本所有属性都需要用@property的形式申明变量,不得其他形式声明

类命名

每个类命名尽量以看名知意的方式命名 eg:


我的控制器: MTMindController ,像有TableViewController这种,还是以Controller结尾,不需要MTMindTableViewController形式
我的控制器的cell: MTMindCell 如果是View则 MTMindView
用户Model: MTUserModel

文件夹命名

文件夹命名外部模块文件夹,以英文加中文命名方式。如图

我的iOS代码习惯_第1张图片
外部模块文件夹命名方式

一般项目按照这个方式模块命名,代理不需要中文,但是需要加前缀

例如Modules(功能模块里边还是有新的模块命名方式依旧如此)。

具体模块比如,我的 MTMind,这下面的模块需要普通的Controller Model View 和Tools 4个文件夹即可,不需要加中文。tools一般备用或采用中介者开发时用到

代理方法(委托方法)/数据源方法命名

委托⽅方法是那些在特定事件发⽣生时可被对象调⽤用,并声明在对象的委托类中的⽅方法。它们有独特的命名约 定,这些命名约定同样也适⽤用于对象的数据源⽅方法。

1、名称以标示发送消息的对象的类名开头,省略类名的前缀并且小写第⼀个字⺟

  • (BOOL)tableView:(NSTableView*)tableViewshouldSelectRow:(int)row;
  • (BOOL)application:(NSApplication *)sender
    openFile:(NSString *)filename;

2、冒号紧跟在类名之后(随后的那个参数表⽰委派的对象)。该规则不适用于只有一个 sender 参数的⽅法:

  • (BOOL)applicationOpenUntitledFile:(NSApplication *)sender;

3、上⾯的那条规则也不适⽤于响应通知的⽅法。在这种情况下,⽅方法的唯⼀参数表⽰通知对象

  • (void)windowDidChangeScreen:(NSNotification *)notification;

4、⽤于通知委托对象操作即将发生或已经发⽣的方法名中要使⽤ did 或 will

  • (void)browserDidScroll:(NSBrowser *)sender;- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window;

枚举常量命名及形式

枚举常量命名以 MT为前缀,命名以 MT 为前缀,而枚举值以大写 MT 开头,后面的单词首字母大写,其余小写。如:
typedef NS_ENUM(NSUInteger, MTContentMode) {
MTContentModeScaleFit ,
MTContentModeScaleFill
};
枚举用NS_ENUM 这种OC的形式,不能用c的形式

const常量命名

以小写 k + MT 开头,后面单词首字母大写,其余小写。如:
const float kBNPMaxHeigt = 100.0f;
如果是静态常量,仅限本类内使用的,加上前缀 s_ ,如果是整个工程共用,以 sg_ 为前缀。如:
s_MTMaxHeight;
sg_MTMaxHeight;

其他常量命名

1、使用 #define 声明普通常量,以小写 k+ MT 开头,后面的单词首字母大写,其余小写。如:

define kMTScreenWidth ([UIScreen mainScreen].bounds.size.width)

2、通知常量名,以Notification为后缀,如:

define MTLoginSuccessNotification @”MTLoginSucessNotification”

代码注释

类注释

类头需要有注释,功能说明,作者等:如


/**

  • 这里是功能说明
  • @author Huangyibiao
  • @modify 如果有修改需要这行,加上修改人和修改日期
    */
    @interface MTUIMaker : NSObject

上述是一般语言写法,我们iOS 项目中创建项目会自行的把 文件名,项目名,作者,创建时间等信息写在文件最上边,如


//
// AppDelegate.swift
// silknets
//
// Created by upintech on 17/6/1.
// Copyright © 2017年 ZZMo. All rights reserved.
//

那么这个时候类文件书名只需要在最下边添加中文说明即可。

方法注释

方法注释需要加上功能说明,参数说明,返回值说明,一般还有作者,作者这里可不写:


/**

  • @author
  • 描述内容
  • @param string <#string description#>
  • @param font <#font description#>
  • @return <#return value description#>
    */
  • (CGSize)sizeWithString:(NSString*)stringand Font:(UIFont *)font;

上述代码风格也就是喵神的代码注释插件风格,添加即可,现在苹果Xcode8.0开始自带此功能

属性注释


对应属性,标明属性表示的意思 风格一:
/※ 属性说明 ※/ ※是 **[这里我不知道怎么写出两边都有这个小星的符号]
风格二:
/※
※ 属性说明

※/

类内分块结构写法

pragma mark - Life Controller : ViewController 生命周期方法 ,其中包含dell方法

pragma mark - SetupSubView 子空间方法添加

pragma mark - Func 添加功能以及逻辑的私有方法 :

Fun旗下有 private Func 和public Func

pragma mark - Action 行为,例如按钮等动作 ,通知,kvo等回调方法

pragma mark - Animation 动画

pragma mark - Deleget & DataSource delegate 和 dataSource方法

各个Delegate方法和DataSource的具体代理需要分开写

pragma mark - LoadData 数据加载

pragma mark - set & get : 写setter和getter方法

注意,懒加载里边不要写逻辑,ViewDidLoad里边尽量加载控件,不要写frame或者约束以及其它具体逻辑
上述需要按照顺序编写,查看写方便

你可能感兴趣的:(我的iOS代码习惯)