美文网首页
我的iOS代码习惯

我的iOS代码习惯

作者: StonesMonkey | 来源:发表于2017-06-01 22:50 被阅读105次

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

    命名

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

    前缀

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

    后缀

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

    方法命名

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

    <pre>- (void)insertModel:(id)modelatIndex:(NSUInteger)atIndex;</pre>

    属性、变量命名

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

    <pre>@property (nonatomic, strong) UIButton *submitButton;</pre>

    bool属性命名

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

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

    类命名

    每个类命名尽量以看名知意的方式命名 eg:
    <pre>
    我的控制器: MTMindController ,像有TableViewController这种,还是以Controller结尾,不需要MTMindTableViewController形式
    我的控制器的cell: MTMindCell 如果是View则 MTMindView
    用户Model: MTUserModel
    </pre>

    文件夹命名

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

    外部模块文件夹命名方式

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

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

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

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

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

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

    <pre>

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

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

    <pre>

    • (BOOL)applicationOpenUntitledFile:(NSApplication *)sender;
      </pre>

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

    • (void)windowDidChangeScreen:(NSNotification *)notification;
      </pre>

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

    <pre>

    • (void)browserDidScroll:(NSBrowser *)sender;- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window;
      </pre>

    枚举常量命名及形式

    枚举常量命名以 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 开头,后面的单词首字母大写,其余小写。如:

    <pre>

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

    </pre>

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

    <pre>

    define MTLoginSuccessNotification @”MTLoginSucessNotification”

    </pre>

    代码注释

    类注释

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

    <pre>
    /**

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

    上述是一般语言写法,我们iOS 项目中创建项目会自行的把 文件名,项目名,作者,创建时间等信息写在文件最上边,如
    <pre>
    //
    // AppDelegate.swift
    // silknets
    //
    // Created by upintech on 17/6/1.
    // Copyright © 2017年 ZZMo. All rights reserved.
    //
    </pre>
    那么这个时候类文件书名只需要在最下边添加中文说明即可。

    方法注释

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

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

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

    属性注释

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

    ※/
    </pre>

    类内分块结构写法

    <pre>

    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方法

    </pre>

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

    相关文章

      网友评论

          本文标题:我的iOS代码习惯

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