私はここ数日間、いくつかの基本を見てきましたが、NSString/NSMutableStringの参照渡しが機能しなかった理由を本当に理解できたことは決してありませんでした。値渡し値渡し参照渡し
- (void)testing{
NSMutableString *abc = [NSMutableString stringWithString:@"ABC"];
[self testing:abc];
NSLog(@"%@",abc); // STILL ABC
}
-(void)testing:(NSMutableString *)str {
str = [NSMutableString stringWithString:@"HELP"];
}
どうすればよいですか?私は私のテストメソッドがメインメソッドからStringを操作できるようにしたい。私はMutable配列、辞書などでこれを使っていて、うまくいきます。私はこれが文字列でどのように動作するかは分かりませんでした。
しかし、値はJavaのような第一列
NSMutableString *string1;
NSMutableString *string2;
string1 = [NSMutableString stringWithString: @"ABC"];
string2 = string1;
[string2 appendString: @" HELP"];
NSLog (@"string1 = %@", string1); // ABC HELP
NSLog (@"string2 = %@", string2); // ABC HELP
:ここ
は方法です。あなたがあなたのプログラムに持っているポインタのコピーを作ることを意味するならば、それをより明確に述べるべきです。 –
これで、setStringは、ポインタによって指された値を変更しました。これは、addMethodメソッドが行うNSMutable配列を使用する場合と同じです。 [NSMutableString stringWithString:@ "HELP"]すると新しい文字列に正しいポインタが返されるので、メイン(呼び出し)メソッドからのポインタが変更されないのはなぜですか? –
@BK:メインメソッドのポインタは決して変更されません。値渡しです。ポインタは関数に渡されるときにコピーされます。ローカル変数に代入することは、決して外部に影響を与えることはできません。むしろ、オブジェクトのメソッドを使用して、ポインタが指すオブジェクトを変更する必要があります。 – newacct