这是在目标C中交换两个ivar数组的便捷方式吗?
- (void) foo {
NSArray *aux;
aux = array1;
array2 = array1;
array1 = array2;
}
还有其他选择吗?在某些情况下可能会出现与retainCount相关的问题吗? 我很困惑,因为在我正在审查的程序中,交换是通过以下方式完成的:
- (void) foo {
NSArray *aux;
aux = array1;
[aux retain];
array2 = array1;
array1 = array2;
[aux release];
}
答案 0 :(得分:3)
它们都不起作用,你没有在任何地方使用你的辅助变量,最后它们都会指向相同的内存位置而不是这样做:
- (void) foo {
NSArray *aux;
aux = array1;
array1 = array2;
array2 = aux;
}
答案 1 :(得分:2)
在您的示例中,您只是交换指针。顺便说一下,你正在做 错了:
- (void) foo {
NSArray *aux;
aux = array1; /* aux is array1 */
array2 = array1; /* array2 is array1 */
array1 = array2; /* array1 is array1 */
}
如果你在这些阵列上有属性,我建议你使用它:
- (void)swapMyArrays
{
NSArray *temp = [NSArray arrayWithArray:self.array1];
[self setArray2:array1];
[self setArray1:temp];
}
答案 2 :(得分:1)
我认为你最后有一个错误,它应该是:
- (void) foo {
NSArray *aux;
aux = array1;
array1 = array2;
array2 = aux; // instead of array2 = array1
}
否则你使两个数组都相同。
我编写了关于我所做变量中的错误的(正确)评论的答案。