为什么 Objective C 中常见的集合类(如 NSString、NSArray、NSDictionary 等)有可变版本和不可变版本。分别定义它们背后的逻辑是什么?性能、内存管理还是其他什么?
类的不可变版本之所以存在,是因为不可变对象本身就是一个特定状态的唯一标识符。 IE。如果你有一个NSArray
of 100 NSString
实例,即NSArray
对于这些字符串中的任何一个,实例都可以被视为幂等。
同样,不变性意味着状态出售后不能发生更改。例如,NSView
's subviews
方法返回一个不可变的数组,从而确保调用者不会用内容玩游戏(甚至也不希望能够)。在内部,NSView
could选择返回包含子视图(因为它内部可变)的[可能] NSMutableArray 和类型转换NSArray
意味着调用者无法在没有邪恶转换或错误编译器警告的情况下操纵内容。 (顺便说一句,这可能是也可能不是真正的实现——但这种模式在其他地方使用)。
不变性还意味着可以进行枚举和/或遍历,而不会产生中间状态变化的风险。类似地,许多不可变类也是显式线程安全的;任意数量的线程可以同时读取不可变状态,通常不需要锁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)