Objective c 如何在obj-c中交换两个数组
这是在objective C中交换两个ivar阵列的方便方法吗Objective c 如何在obj-c中交换两个数组,objective-c,arrays,swap,Objective C,Arrays,Swap,这是在objective C中交换两个ivar阵列的方便方法吗 - (void) foo { NSArray *aux; aux = array1; array2 = array1; array1 = array2; } 还有其他选择吗?在某些情况下,可能存在与重新记账相关的问题? 我感到困惑,因为在我审查掉期的程序中,是由以下人员完成的: - (void) foo { NSArray *aux; aux = array1; [aux r
- (void) foo {
NSArray *aux;
aux = array1;
array2 = array1;
array1 = array2;
}
还有其他选择吗?在某些情况下,可能存在与重新记账相关的问题?
我感到困惑,因为在我审查掉期的程序中,是由以下人员完成的:
- (void) foo {
NSArray *aux;
aux = array1;
[aux retain];
array2 = array1;
array1 = array2;
[aux release];
}
在您的示例中,您只交换了指针。顺便说一句,你在做什么 这是错误的:
- (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];
}
我认为你最后犯了一个错误,应该是:
- (void) foo {
NSArray *aux;
aux = array1;
array1 = array2;
array2 = aux; // instead of array2 = array1
}
否则,将使两个数组成为同一个数组
我将答案编辑为关于我所做变量错误的(正确)注释。它们都不起作用,您没有在任何地方使用aux变量,最后它们都将指向相同的内存位置,请执行以下操作:
- (void) foo {
NSArray *aux;
aux = array1;
array1 = array2;
array2 = aux;
}
这是不正确的,在您的示例中,两者都将指向array1拥有的内存位置。如果合成array1或array2,这将有问题,不是吗?@Oscar Gomez-这是一个输入错误,感谢您指出。如果合成array1或array2,这将有问题,否?这取决于您是否要保留分配的值,然后您需要调用retain,如果它是合成的,则取决于它的声明方式,尽管除非您使用self.array1,否则您不会使用setter进行赋值。您是否建议将其用于任何类型的属性(retain、assign或copy)?retain和copy都可以。将它与assign属性一起使用只会交换array2的指针并中断array1,因为在我的示例中,它被分配给自动释放的对象。无论如何,在对象中使用assign属性并不常见。我认为您的代码(在SwapArrays first语句中)也有一个输入错误。对不起,user870560,我现在没有在计算机中使用编译器,我无法发现它。可能是什么错误?我认为应该是这样的:NSArray*temp=[NSArray arrayWithArray:self.array2];无论如何,谢谢你的回答,它帮助我澄清了事情。