gpt4 book ai didi

iphone - 在 Objective C 中拥有可变和不可变版本的类(如 NSArray、NSDictionary 等)背后的逻辑是什么?

转载 作者:IT王子 更新时间:2023-10-29 08:05:06 26 4
gpt4 key购买 nike

为什么 Objective C 中的常见集合类(如 NSString、NSArray、NSDictionary 等)有可变版本和不可变版本。分别定义它们背后的逻辑是什么?性能、内存管理或其他什么?

最佳答案

类的不可变版本之所以存在,是因为不可变对象(immutable对象)本身就是特定状态的唯一标识符。 IE。如果您有一个包含 100 个 NSString 实例的 NSArray,则该 NSArray 实例对于这些字符串中的任何一个都可以视为幂等的。

同样,不变性意味着在状态被出售后不会发生变化。例如,NSViewsubviews 方法返回一个不可变数组,从而确保调用者不会用内容玩游戏(甚至不希望能够).在内部,NSView 可以选择返回包含 subview 的 [likely] NSMutableArray(因为它在内部是可变的)并且类型转换为 NSArray 意味着调用者无法在没有恶意转换或错误编译器警告的情况下操作内容。 (这可能是也可能不是真正的实现,顺便说一句——但这种模式在其他地方使用过)。

不变性还意味着枚举和/或遍历可以在没有中间状态更改风险的情况下完成。同样,许多不可变类也是显式线程安全的;任意数量的线程可以同时读取不可变状态,通常不需要锁。

关于iphone - 在 Objective C 中拥有可变和不可变版本的类(如 NSArray、NSDictionary 等)背后的逻辑是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6566673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com