将指针传递给方法并为其分配对象

时间:2011-11-23 01:43:17

标签: objective-c pointers scope

考虑这个例子:

NSMutableArray *aArray;
[Util doSomeMagic:aArray];
[aArray count];

- (void)doSomeMagic:(NSMutableArray *)aArray
{
    if(aArray == NULL)
    {
      aArray = [[NSMutableArray alloc] init];
    }
    [aArray addObject:@"magic"];
    [aArray addObject:@"magic2"];
}

doSomeMagic:方法将填充数组。在doSomeMagic:内,我可以正确获取数组,但在方法之外,数组仍为空。如何让doSomeMagic:方法更改传入的内容?

2 个答案:

答案 0 :(得分:2)

您的doSomeMagic:方法需要通过引用接收数组,确保它修改它收到的对象:

- (void)doSomeMagic:(NSMutableArray *)array
{
    // for example, let's remove the last element in the array
    [array removeLastObject];
}

我猜你的doSomeMagic:可能看起来像这样(这不起作用,因为它修改了范围的数组副本):

- (void)doSomeMagic:(NSMutableArray *)array
{
    NSMutableArray *newArray = [NSMutableArray arrayWithArray:array];
    // for example, let's remove the last element in the array
    [newArray removeLastObject];
}

编辑:我们发现您已添加了doSomeMagic:代码。你需要在这里了解传递参考。由于你使用nil数组调用doSomeMagic:(因为你声明了aArray而没有将其设置为指向后面的任何内容),当doSomeMagic:运行时它会将一个新数组赋给nil,然后是方法返回没有可见效果。我建议更改您调用它的代码:

NSMutableArray *aArray = [NSMutableArray array];
[Util doSomeMagic:aArray];
[aArray count];

和您的doSomeMagic:方法:

- (void)doSomeMagic:(NSMutableArray *)aArray
{
    [aArray addObject:@"magic"];
    [aArray addObject:@"magic2"];
}

请记住,由于我在NSMutableArray上使用类array,因此返回的数组将在[aArray count];后自动释放。最终代码如下所示:

NSMutableArray *aArray = [[NSMutableArray array] retain];
[Util doSomeMagic:aArray];
[aArray count];
[aArray release];

答案 1 :(得分:0)

正如您所发现的那样,结果数组是不可变的。您需要通过引用传递它

  • (BOOL)TweakMe:(NSMultableArray **)o { ... }