iOS -- Effective Objective-C 阅读笔记 ,7

1: 实现 description 方法

NSlog 在输出自定义的类时, 只输出了 类名 和 对象的内存地址. 要想输出更为有用的信息也很简单, 只需要覆写 description 方法并将描述此对象的字符串 返回即可.

- (NSString*)description{

return xxxxxxx;

}

有个简单的办法, 可以在 description 中输出很多互不相同的信息, 那就是借助 NSDictionary 类的 description 方法.

- (NSString *)description{

return [NSString stringWithFormat:@"%@",@{@"title: _title, @"age":@(_age)"}];

}

NSObject 协议中还有一个方法 debugDescription , 此方法的用意与 description 非常相似, 二者的区别在于, debugDescription 方法是开发者在调试器中以控制台命令 打印对象时才调用的. 在 NSObject 的默认实现中, 此方法只是直接调用了 description

使用方法, 我们在创建实例所用的代码后面插入断点, 然后通过调试器, 使其暂停于此, 当程序运行到断点时, 开发者就可以向调试器控制台中输入命令了,

'po' 命令, 可以完成对象打印的 (prient-object) 工作.

同样, 你也可以覆写 debugDescription 的方法, 使其更合你意.

总结:

实现 description 方法返回一个有意义的字符串, 用以描述该实例

若想在调试时打印出更详细的对象描述, 则应实现 debugDescription 方法, 'po' 命令, 打印对象

2: 尽量使用不可变对象

设计类的时候, 应充分运用属性来封装数据. 而在使用属性时, 则可将其生命为 '只读'. 默认情况下, 属性是 '可读可写的', 这样设计出来的类都是 '可变的'. 不过, 一般情况下,我们要建模的数据未必需要改变.

具体到编程实践中,则尽量把对外公布出来的属性设为只读, 而且在只有却又必要的时候对外公布.

总结:

尽量创建不可变的对象

3: 使用清晰而协调的命名方式

尽量使用 '驼峰式大小写命名法'

方法命名 长度要适中, 表达清晰, 且言简意赅.

给方法命名时的注意事项

(1) 如果方法的返回值是新创建的, 那么方法名的首个词应是返回值的类型, 除非前面还有修饰语.属性的存取方法不遵循这种命名方式. 属性的存取方法应该按照其对应的属性来命名.

(2) 应该把表示参数类型的名词放在参数前面.

(3) 如果方法要在当前对象上执行操作. 那么就应该 包含动词, 若执行操作时还需要参数. 则应该在动词后面加上 一个 或多个名词.

(4) 不要使用 str 这样的简称, 而应该使用 String 这样的全称.

(5) Boolen 属性应加上 is 前缀, 如果某方法返回非属性的 Boolean 值, 那么应该根据其功能, 选用 has 或 is 当前缀.

(5) 将 get 这个前缀 留给那些 借由 ' 输出参数' 来保存返回值的方法.

类与协议的命名

应该为类与协议的名称加上前缀, 以避免命名空间冲突. 而且应该像给方法起名时那样吧词句组织好, 使其从左至右读起来较为通顺.

类 与 协议的命名惯例, 命名方式应该协调一致.

总结:

起名时应遵循从标准的 OC 命名规范

方法名要言简意赅, 从左至右读起来顺畅

方法名里不要使用缩略后的类型名称

为私有方法命名规范

以 'p_' 开头命名私有方法, 这样容易区分

不要但用一个下划线 '_' 做私有方法的前缀, 因为这种方法是预留给苹果公司的.