假设我有这种方法:
-(void) mofidyObject:(NSArray *)obj;
如何准确修改传入此数组的对象?
我已经看过一段时间了,我知道你需要一个“&”前缀,但不确切知道如何。
答案 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的虚空大师)