【团购|iOS-代码细节优化二】
前面我们讲述了命名规则 , 那么对于整体来说 , 我们还要进行代码编写的设计 , 以便在整体回溯寻找问题是不至于浪费时间 。 那么在编写代码的时候 , 注意一些细节上的处理 , 比如代码编写方式或API设计会使我们的代码业务逻辑更清晰 , 可读性更高 。
代码编写设计
成员变量 VS Setter&Getter刚刚入门的iOS开发者总是纠结在给属性赋值或取值的时候 , 究竟是直接操作成员变量还是通过使用setter或者getter进行赋值取值操作 , 其实关于这个问题很多人的观点也不相同 , 从性能上来说 , 由于Objective-C的消息机制使用setter和getter效率要比直接操作成员变量的效率低 , 从内存方面来说 , setter和getter都有内存的处理 , 所以使用起来更安全 , 一个折中的办法是除懒加载对象外 , 赋值时使用setter , 取值时直接操作成员变量 , 这样既保障了内存的安全 , 又提升了效率 , 而且通常取值操作又多于赋值操作 。
纯代码对象创建的编写方式优化虽然苹果提供了xi吧、SB这些创建视图的方式 , 但使用纯代码创建一个视图对象的开发者还是占大多数 。 但利用GCC对C的拓展来创建却鲜为人知(如今被clang继承 , 有点像block和内联函数的结合体) , 它最大的好处是使代码逻辑结构层次划分得更加明显 , 同时 , 对于一个无需复用的小段逻辑也免去了重量级的调用函数 , 而且还有一个好处是 , 当你想要复制粘贴这段代码时 , 你仅需要更改一处变量名即可 , 就上例而言原来的写法需要更改三处变量名 。
上面我们说到许多开发者习惯使用懒加载的方式创建对象 , 因为这样逻辑层次很清晰 , 但是对比这种GCC的写法 , 同样具有逻辑层次 , 这种方式可以让我们的肉眼很容易捕捉这段代码的主体 , 使用懒加载创建的对象形式前提是你使用getter , 而一些临时变量是没有getter的 , 而且使用懒加载还需要找到对应getter方法实现的位置去看具体的设置 , 没有这个一目了然 。 再者懒加载对象主要优点是延迟加载内存 , 在需要被使用的时候才会被创建 , 增加类的灵活性 , 更好的控制内存 。 而针对一些必然会创建的对象有些大材小用 , 失去原本的意义了 。
UIView *subView = ({
UIView *view = [[UIView alloc
initWithFrame:[UIScreen mainScreen
.bounds
;
view.backgroundColor = [UIColor whiteColor
;
[self.view addSubview:view
;
view;);
使用字面量语法替换等价方法字面量语法实际上是一种“语法糖” , 就是以一种非常简单快捷的方式能创建对象 , 使编程更高效 , 更愉悦 。 目前Objective-C支持的字面量语法的类有NSString、NSNumber、 NSArray、NSDictionary 。 使用字面量语法的好处:
1.可以缩减源代码长度 , 没有多余语法成分 , 提高可读性 。
2.如果数组元素对象中有nil , 会抛出异常 , 其效果等于先创建一个数组 , 然后把方括号内的所有对象都加到这个数组中 。
缺点:使用字面量创建都是不可变对象 , 如果想创建可变对象需要复制一份 。
使用类型常量替换#define预处理指令编写代码时 , 我们常用#define去定义一个宏 。 预处理指令会把源代码中的宏替换为对应的值 , 可以达到效果 , 不过这样定义是存在问题的 , 定义出来的常量没有类型信息 , 无法一眼看出代表的是一个时间 , 可读性差 , 而且如果把这个宏定义放在头文件中的话 , 那么引入了这个头文件的代码 , 其中对应的值都会被替换 , 如果有人定义了常量值 , 这将导致应用程序中的常量值不一致 。 一种更好的处理方案是使用类型常量替换掉相应的#define预处理指令 。
外部不可见的:利用static const 。 static修饰:意味着仅在此编译单元(.m文件)中可见;const修饰:如果试图修改值 , 编译器就会报错;static const:二者都使用 , 编译器的处理效果和#define一样 , 把遇到的变量替换为常值 。
外部可见的:有些时候是需要向外部公开某个常量的 , 比如在使用通知中心的时候 , 你需要向其他对象派发通知 , 监听者需要知道监听的事件 , 这个事件的名称我们通常写成一个外界可见的常值变量 , 这样的话 , 监听者无需知道实际字符串的值 , 只需要以常值变量来作为自己监听的事件名称 。
- 双十二|Web前端培训:一些常见的HTML代码验证器
- 软件|风口上的低代码:我们看到了这些变化与趋势
- 德尔塔|神秘的宇宙射线事故3:宇宙射线可改变代码,难道世界是虚拟的?
- 宇宙射线|神秘的宇宙射线事故2:宇宙射线击中选票机,改变代码干扰选举?
- 知乎|嵌入式开发:MisraC—编写更安全、更清晰的C代码
- 软件|后疫情时代,低代码开发平台迎来新机遇。
- 电子商务|生鲜电商与社区团购,带给了我们什么?
- 团购|Haylou RS4 智能手表,全面开启智慧新生活
- 团购|员工骤减80%,工资只发70%,十荟团裁员降薪求生
- 安卓|Chrome 将代码分区,以加快 Android 上的启动时间