十八条:尽量使用不可变对象

###十八条:尽量使用不可变对象

属性有“readonly”,“readwrite”默认情况下是可读可写的,这样设计出来的类都是可变的。不过一般情况下,我们要建模的数据未必需要改变,比如说,某数据所表示的对象原子一项只读网络服务,里面可能包含了一系列需要在地图上的相关点,像这种对象就没有必要改变其内容。即是修改了,也不会上传至服务器。

具体到编程中,则应该尽量把对外公布出来的属性设为只读,而且只在确有必要时才对外公布,

为了将某个类做成不可变类,需要把所有属性声明为readonly。

如果想对外部是readonly,内部readwrite。只需要在.h文件中定义为readonly,.m中定义为readwrite。

readonly可拓展为readwrite

但是还能通过KVC来设置其内部属性,

这样做可以改动属性,因为KVC会在类里查找“setIdentifier”方法,即便没有于公共接口中公布此方法,它也依然包含在类里,不过,这样做等于违规绕过本类所提供的API。

总结:

1.尽量创建不可变对象

2.若某项属性仅可于对象内部修改,则在“Class-continuation分类”中将其有readonly属性拓展为readwrite属性

3.不要把不可变的collection作为属性公开,而应提供相关方法,一次修改对象中的可变collection

你可能感兴趣的:(十八条:尽量使用不可变对象)