gpt4 book ai didi

objective-c - 是可变类 "heavier?"

转载 作者:可可西里 更新时间:2023-11-01 05:15:18 24 4
gpt4 key购买 nike

根据一些直观的(可能是错误的)性能想法,我总是在存储可变实例之前获取它的副本。因此,如果一个属性需要一个 NSArray,我会使用我正在使用的可变数组并将其存储为 self.array = mutableArray.copy(尽管该属性被指定为 strongretain)。

突然间,这对我来说似乎很愚蠢,但它是吗?可变实例 - 执行完全相同的任务 - 执行相同的操作吗?

注意:可变实例超出范围并且(感谢 ARC)在此之后立即被释放,所以不用担心一旦它被分配给属性就会发生变化。

最佳答案

NSArrayNSMutableArray 都是(据我所知)在 CFArray 之上实现的,它只是有一个标志指定它是否可变。需要可变数组的 CFArray 函数在开头有一个断言,检查该标志:

void CFArraySetValueAtIndex(CFMutableArrayRef array, CFIndex idx, const void *value) {
// snip...
CFAssert1(__CFArrayGetType(array) != __kCFArrayImmutable, __kCFLogAssertion, "%s(): array is immutable", __PRETTY_FUNCTION__);

可变的和不可变的 CFArray 除了通过或失败这个断言之外是相同的,所以 NSArrayNSMutableArray 应该是,性能- 或其他方式。

关于objective-c - 是可变类 "heavier?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9181011/

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