iOS -如何让你写的代码更规范

640?wx_fmt=gif

640?wx_fmt=jpeg

Linux编程 点击右侧关注,免费入门到精通! 640?wx_fmt=jpeg


作者丨嘿晴天

http://www.jianshu.com/p/cf5a8f09e887


最近有看一本Effective Objective-C 2.0 结合一下最近的工作一些总结,写出以下的这篇文章。



之前的公司很多时候,都是1到2人去共同完成一个项目,没有更多更加注意到一个问题,但面临多人开发时,怎么样去写更让和你一起开发更容易懂,更容易维护的代码呢,一下是我结合书籍一些总结



640?wx_fmt=gif1.多使用字面量语法,这样可以代码更加易懂



例如:


   //

    NSNumber *number = @1;

    //

    NSString *string = @"a";

    //

    NSDictionary *dict = @{@"a":@"1"};

    //

    NSArray *array = @[@"1"];


640?wx_fmt=gif2.善于换行和空格让你代码看起来更舒服整齐:


640.jpeg?


很显然适当的换行让代码看起来更直观,看起更加舒服,更有甚者,最近的项目有到一个SDAutoLayout的框架,链式的语法更加直观,稍加换行更使得代码看起来美观,


640.jpeg?



640?wx_fmt=gif3.使用枚举去表示状态



我们可以看一下UIButton所使用到的枚举


typedef NS_OPTIONS(NSUInteger, UIControlState) {

    UIControlStateNormal       = 0,

    UIControlStateHighlighted  = 1 << 0,                  // used when UIControl isHighlighted is set

    UIControlStateDisabled     = 1 << 1,

    UIControlStateSelected     = 1 << 2,                  // flag usable by app (see below)

    UIControlStateFocused NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 3, // Applicable only when the screen supports focus

    UIControlStateApplication  = 0x00FF0000,              // additional flags available for application use

    UIControlStateReserved     = 0xFF000000               // flags reserved for internal framework use

};



我们可以观察到一点,枚举的值每个都是UIControlState的前缀的,这里更加方便根据代码提示找到响应的状态


640?wx_fmt=gif4.使用分类简化你的代码



我们时常将我们的业务请求放在一个类里,方便维护,那么随着请求越来越多了,这个类的代码量也就越来越多,以此我们可以根据不同业务去设置不同的分类去将代码区分开来,不仅方便维护,也使得代码更加直观

//


640.jpeg?



640?wx_fmt=gif5.实现description方法


640.jpeg?



我们发现在我自己创建的类中,没有实现description 和debugDescription 我们会发现 但我们 log 出来和po 出来的仅仅是一个内存地址,这样对我们查看model 里面的字段是很不方便的,因此我们需要打印属性的类建议实现这个方法,举个例子如果我们想查看对请求的model 打log,那么可以在BaseModel 加上


- (NSString *)description { 

    return [NSString stringWithFormat:@"%@",[self mj_keyValues]];

}

- (NSString *)debugDescription {   

    return [NSString stringWithFormat:@"%@ -- %p",[self mj_keyValues], self];

}



那么便可以方便的查看log 和debug 时打印出属性如图


640.jpeg?



640?wx_fmt=gif6.使用多target 来区分正式环境和开发环境或者马甲包



可以用三个target,正式包和开放包,马甲包,来维护三种不同的环境下的project ,这样公用了一份代码,也可以根据需求对不同环境进行设置,


640.jpeg?


在buildSetting 设置对应的宏来区分不同的环境


640.jpeg?


通过设置这个宏我们可以区分不同的环境,例如在设置项目请求的域名时可以


#if defined(PROD_CONFIG)

NSString * const BaseURL       = @"http://xxxx.com";

#else

NSString * const BaseURL       = @"http://test.xxxx.com";

#endif



640?wx_fmt=gif7.尝试解耦mvc模式



mvc还是我们比较常用的设计模式,随时业务逻辑不断的累计,你可能会不断的在controller 添加很多逻辑,这个是mvc的弊病,相信大家很清楚。



解耦在我的理解下,是用更多的文件,去分散的一大坨的逻辑,来举个例子方便理解


比如说一个订单列表的controller 里面已经非常赘余了我们可以尝试tableView或者collectionView 相关的逻辑抽取出来类似这样


640.jpeg?



另外如果有更复杂的场景例如订单的列表要显示出分类,未完成订单,已完成订单,已评价订单可以左右滑动,并且三个订单内部的逻辑差异的比较大,将会导致你的controller 的代码量非常的多,那你可以考虑使用三个controller 将对应的逻辑分出来,

//


640.jpeg?


 推荐↓↓↓ 

640?wx_fmt=png

?16个技术公众号】都在这里!

涵盖:程序员大咖、源码共读、程序员共读、数据结构与算法、黑客技术和网络安全、大数据科技、编程前端、Java、Python、Web编程开发、Android、iOS开发、Linux、数据库研发、幽默程序员等。

640?wx_fmt=png万水千山总是情,点个 “ 好看” 行不行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值