1. ホーム
  2. ios

[解決済み] Objective C - 値で渡す、参照で渡す

2022-02-16 21:48:28

質問内容

まず、こんな簡単な質問で申し訳ありません。しかし、何が起こっているのかを理解する必要があります。

という出力になるかと思いきや upper case string . しかし、それは次のようになります。 UPPER CASE STRING .

- (void)test
{
     NSString *stringVar = @"UPPER CASE STRING";
     [self changeString:stringVar];
     NSLog(@"value after changed : %@", stringVar);
}

- (void)changeString:(NSString*)string
{
     string = [string lowercaseString];
}

何が起きているのか、どうすれば直るのか。

解決方法は?

その [string lowercaseString] の呼び出しは 新しい NSString オブジェクトを作成し、それをローカル変数 string . の値を変更するものではありません。 stringVar の外側で changeString 関数を使用します。ポインタ自体は値で渡される。

やりたいことをやるには、ポインタをポインタに渡すという方法もある。

-(void) test
{
     NSString *stringVar = @"UPPER CASE STRING";
     [self changeString:&stringVar];
     NSLog(@"value after changed : %@", stringVar);
}

-(void) changeString:(NSString**)string
{
     *string = [*string lowercaseString];
}