Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何在obj-c中交换两个数组_Objective C_Arrays_Swap - Fatal编程技术网

Objective c 如何在obj-c中交换两个数组

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

这是在objective C中交换两个ivar阵列的方便方法吗

- (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];无论如何,谢谢你的回答,它帮助我澄清了事情。