私がこの方法を持っているとしましょう:
-(void) mofidyObject:(NSArray *)obj;
この配列に渡されるオブジェクトを正確に変更するにはどうすればよいですか?
私はこれを何度か見たことがあり、「&」プレフィックスが必要であることは知っていますが、正確な方法はわかりません。
私がこの方法を持っているとしましょう:
-(void) mofidyObject:(NSArray *)obj;
この配列に渡されるオブジェクトを正確に変更するにはどうすればよいですか?
私はこれを何度か見たことがあり、「&」プレフィックスが必要であることは知っていますが、正確な方法はわかりません。
いくつかのこと:
オブジェクトがあり、オブジェクトを指す変数があります。これらは異なり、それらを変更する方法も異なります。
オブジェクト (そのコンテンツ) を変更する場合は、NSArray が変更可能なオブジェクトではないという事実を除いて、コードにある通常の受け渡しメカニズムを使用します。しかし、代わりに NSMutableArray を渡した場合、それは機能します。
変数の内容を変更して別のオブジェクトを指すようにする場合は、そのアドレスをメソッドに渡す必要があります。そこで「&」演算子の出番です。
このようなアウトパラメータがCocoaで物事を行うための最良の方法である状況は比較的少ないです。このパターンを検討する必要がある場合、たとえばNSError
処理など、手がかりのフレームワークを見てください。
このような他の質問は、可変配列でこのパターンに対処しています。
とは言うものの、Objective-CはCの上にある単なるレイヤーであり、Cが実行できることは何でも実行できます。参照によってポインタを渡すことをブラッシュアップするには、この優れたチュートリアル (Masters of the Void、Uli Kustererによる)をご覧ください。
-(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
}
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 の下では許可されません。