考虑这个例子:
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:
方法更改传入的内容?
答案 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)
正如您所发现的那样,结果数组是不可变的。您需要通过引用传递它