0

假设我有这个方法:

-(void) mofidyObject:(NSArray *)obj;

如何准确修改传递到此数组的对象?

我已经看过一段时间了,我知道您需要有一个“&”前缀,但不知道具体如何。

4

4 回答 4

3

一些东西:

有一个对象,然后有一个指向对象的变量。这些是不同的,修改它们的方法也不同。

如果要修改对象(其内容),则使用代码中的正常传递机制——除了 NSArray 不是可变对象这一事实。但是,如果您改为传递 NSMutableArray,那将可以正常工作。

如果要修改变量的内容,使其指向不同的对象,则必须将其地址传递给方法。这就是“&”运算符发挥作用的地方。

于 2012-11-20T12:23:46.033 回答
0
-(void) mofidyObject:(NSMutableArray **)obj
{
    [*obj addObject:@"love you!"];
}    

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"Stack", @"Overflow", nil];
    [self mofidyObject:&array];

    //Don't forget to release after use
}
于 2012-11-20T12:22:37.963 回答
0
NSMutableArray *arrRows=[[NSMutableArray alloc]init]; //suppose you have this NSMutableArray
[self mofidyObject:&arrRows];


}
-(void) mofidyObject:(NSMutableArray **)obj
{
    self.arrMultiProd=*obj; //Then you can assign pointer refrence to your NSMutableProperty like this
}

但是在 ARC 下是不允许的。

于 2012-11-20T12:22:46.153 回答
0

在 Cocoa 中,像这样的外参数是最好的处理方式的情况相对较少。看看框架中的线索,当你应该考虑这种模式时,例如NSError处理。

其他问题,例如这个问题已经用可变数组解决了这种模式。

也就是说,Objective-C 只是 C 之上的一层,可以做 C 能做的任何事情。复习通过引用传递指针 - 看看这个优秀的教程 (虚空大师,Uli Kusterer)

于 2012-11-20T12:33:28.803 回答