Cocoa對象默認(rèn)都是可變的髓需。
為什么會存在不可變對象?
很簡單房蝉,它保證了對象不被意外地改變僚匆。
什么樣的值適合作為不可變對象微渠?
1、封裝離散值而成的集合咧擂。
2逞盆、值被包含在緩沖區(qū)中的對象,這里說的是對象的值松申。
3云芦、不可變比可變開銷大的對象。
不可變對象并不能保證其中的所有對象都不可被改變贸桶,因?yàn)槟闶强梢愿淖兤渲械目勺儗ο蟮木艘荩阒皇遣荒芨淖冞@個對象的指針而已。
另外皇筛,在各種轉(zhuǎn)換的過程中琉历,也可能出現(xiàn)可變對象被轉(zhuǎn)換成不可變對象的情況。
某些集合可能因?yàn)榇鎯Φ目勺儗ο蟀l(fā)生了改變而變得無效或者被破壞水醋。
1旗笔、如果作為該集合對象的屬性的對象的key發(fā)生了改變,并影響到了該集合對象的hash或者isEqual方法拄踪,就會導(dǎo)致該集合對象被破壞蝇恶。
2、如果該集合對象是順序集合宫蛆,如果其中存儲的對象的屬性發(fā)生了改變可能讓集合中對象之間的比較方法變得無效艘包,從而使順序集合變得無效。