修改传递给方法的对象

时间:2012-11-20 12:03:51

标签: iphone objective-c xcode cocoa-touch

假设我有这种方法:

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

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

我已经看过一段时间了,我知道你需要一个“&”前缀,但不确切知道如何。

4 个答案:

答案 0 :(得分:3)

一些事情:

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

如果要修改对象(其内容),则使用代码中的常规传递机制 - 除了NSArray不是可变对象的事实。但是如果你传递了一个NSMutableArray,那就行了。

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

答案 1 :(得分: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
}

答案 2 :(得分: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下,它是不允许的。

答案 3 :(得分:0)

在这样的情况下,像这样的out-parameters是在Cocoa中做事的最佳方式。看一下线索的框架,就像你应该考虑这种模式一样,例如: NSError处理。

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

也就是说,Objective-C只是C层上的一层,可以做任何C可以做的事情。要通过引用了解传递指针 - 看看这个excellent tutorial (Uli Kusterer的虚空大师)