Alt*_*cho 2 objective-c automatic-ref-counting
我有一个可变数组:
NSMutableArray *array;
Run Code Online (Sandbox Code Playgroud)
其中包含许多对象.
我应该使用以下哪一项:
[array replaceObjectAtIndex:10 withObject:anObject];
Run Code Online (Sandbox Code Playgroud)
VS:
array[10] = anObject
Run Code Online (Sandbox Code Playgroud)
在ARC环境中?
编辑:我假设replaceObjectAtIndex:方法将在手动参考计数环境中发送一个释放方法,而直接赋值则不会.如果我使用直接赋值,那么它是否会混淆ARC编译器?
nkl*_*uza 10
这两种方法之间存在细微差别.
该锵文档解释了写作(分配)是阵列式下标转换为一个呼叫setObject:atIndexedSubscript:.
因此,从您的示例,array[10] = anObject;转换为:
[array setObject:anObject atIndexedSubscript:10];
Run Code Online (Sandbox Code Playgroud)
这很重要,因为setObject:atIndexedSubscript:的行为与 replaceObjectAtIndex:withObject:不同.Apple的 setObject 文档:atIndexedSubscript:解释了差异(强调我的):
如果索引等于count,则将元素添加到数组的末尾,从而增大数组.
在您的示例中,如果array大小为10,则表达式array[10] = anObject;有效; 它会增长你的数组并将对象添加到最后.但是,如果您调用[array replaceObjectAtIndex:10 withObject:anObject];,NSRangeException则会抛出异常.
关于在ARC环境中使用哪种方法,我认为这是一个错误的问题.两者之间的差异不依赖于ARC,因此您的决定应基于预期的行为(可能还有样式).
| 归档时间: |
|
| 查看次数: |
1483 次 |
| 最近记录: |