尽量使用不可变对象而非可变对象

Cocoa对象默认都是可变的。

为什么会存在不可变对象?
很简单,它保证了对象不被意外地改变。

什么样的值适合作为不可变对象?
1、封装离散值而成的集合。
2、值被包含在缓冲区中的对象,这里说的是对象的值。
3、不可变比可变开销大的对象。

不可变对象并不能保证其中的所有对象都不可被改变,因为你是可以改变其中的可变对象的,你只是不能改变这个对象的指针而已。
另外,在各种转换的过程中,也可能出现可变对象被转换成不可变对象的情况。

某些集合可能因为存储的可变对象发生了改变而变得无效或者被破坏。
1、如果作为该集合对象的属性的对象的key发生了改变,并影响到了该集合对象的hash或者isEqual方法,就会导致该集合对象被破坏。
2、如果该集合对象是顺序集合,如果其中存储的对象的属性发生了改变可能让集合中对象之间的比较方法变得无效,从而使顺序集合变得无效。

推荐阅读更多精彩内容