编写高质量iOS的有效方法

发表于:2016-5-20 11:44

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:小小小科夫斯基    来源:51Testing软件测试网采编

  本文章简括了《Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》书中的一些使用规范,具体使用方法可参考书中相应内容,或自行google。
  熟悉Objective-C对象、消息及运行期
  1)类的头文件中尽量少引入其它头文件
  A)某个类头文件包含另一个类属性,用@class表明该属性是个类即可(向前声明)。
  B)如果无法使用向前声明,如声明某个类遵循一项协议,尽量把协议移至分类或单独起文件。
  2)多用字面语法
  A)NSNumber *charNumber = @‘a’ 总比 NSNumber *charNumber = [NSNumber numberWithChar:@‘a’] 简洁的多
  B)NSArray/ NSDictionary 也一样。取值可直接使用下标,且如果数为nil时会崩溃,容易排查。(如果使用arrayWith/dictionaryWith 遇到第一个nil值后面的值就会忽略,影响会更大)
  3)多用类型常量,少用#define预处理指令
  A)例如:static const NSTimeInterval kAnimationDuration = 0.3
  规范:实现文件中用k开头,类之外可见用类名为前缀。
  注意点:一定要用static 和 const 两个关键字声明。static表明仅在定义此变量的编译单元中可见。如果不加static,编译器会为它创建一个外部符号。此时若是另一个编译单元也声明了同样的变量,则会出错。
  B)如果需要对外公开这个变量,可以这样使用:
  头文件:extern NSString *const MyTestNotification;
  实现文件:NSString *const MyTestNotification = @“ThisMyTestNotification”
  4)用枚举表示状态/选项/状态码
  A)可以借助系统的宏(具备向后兼容能力):
  NS_ENUM(NSUIntefer, MyState){**, **, **};
  NS_OPTIONS(NSUInteger, MyState){** =1<<0, **=1<<1};
  注意:用switch语句的枚举,不要使用default分支。此时编译器会警告有的状态未处理。
  5)在对象内部尽量直接访问实例变量
  A)在对象内部读取数据时,应该直接通过实例变量来读,而写入数据时,则应通过属性来写。
  B)在初始化init和dealloc方法中,总是直接访问实例变量来读取数据。
  6)在自有类中使用关联对象存放自定义数据
  A)可以通过关联对象机制把两个对象连接起来。
  B)只有在其它做法不可行的时候才使用关联对象,因为关联对象容易引起难查的bug
  7)消息转发机制
  8)方法交换技术method swizzling
  A)一般来说,只有调试程序的时候才需要在运行期间修改方法实现,这种做法不宜滥用。
  9)类对象
  A)尽量使用类型信息查询方法(isKindOfClass)来确定对象类型,而不要直接比较类对象。因为某些对象可能实现了消息转发功能。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号