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

时间:2011-08-02 20:17:53

标签: objective-c arrays swap

这是在目标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];
}

3 个答案:

答案 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
}

否则你使两个数组都相同。

我编写了关于我所做变量中的错误的(正确)评论的答案。