gpt4 book ai didi

objective-c - NSMutableArray : replaceObjectAtIndex vs assignment

转载 作者:行者123 更新时间:2023-12-04 02:48:45 25 4
gpt4 key购买 nike

我有一个可变数组:

NSMutableArray *array;

其中包含许多对象。

我应该使用以下哪一项:

[array replaceObjectAtIndex:10 withObject:anObject];

对比:

array[10] = anObject

在 ARC 环境中?

编辑:我假设 replaceObjectAtIndex: 方法会在手动引用计数环境中发送释放方法,而直接赋值则不会。那么,如果我使用直接赋值,ARC 编译器会感到困惑吗?

最佳答案

这两种方法之间存在细微差别。

Clang documentation解释了用于写入(赋值)的数组样式下标转换为对 setObject:atIndexedSubscript: 的调用。

因此,根据您的示例,array[10] = anObject; 转换为:

[array setObject:anObject atIndexedSubscript:10];

这很重要,因为 setObject:atIndexedSubscript: 行为方式与 replaceObjectAtIndex:withObject: 不同Apple's documentation setObject:atIndexedSubscript:解释差异(强调我的):

If the index is equal to count the element is added to the end of the array, growing the array.

在您的示例中,如果 array 的大小为 10,则表达式 array[10] = anObject; 有效;它会增加你的数组并将对象添加到末尾。但是,如果您改为调用 [array replaceObjectAtIndex:10 withObject:anObject];,则会抛出 NSRangeException 异常。

关于在 ARC 环境中使用哪种方法,我认为这是一个错误的问题。两者之间的区别不依赖于 ARC,因此您的决定应该基于预期的行为(可能还有风格)。

关于objective-c - NSMutableArray : replaceObjectAtIndex vs assignment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25282748/

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