Objective C - 値渡しと参照渡し 質問する

Objective C - 値渡しと参照渡し 質問する

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

出力はこうあるべきだと思った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];
}

何が起こっているのでしょうか、どうすれば修正できるのでしょうか?

ベストアンサー1

呼び出し[string lowercaseString]により、新しい NSStringローカル変数に割り当てるオブジェクト。関数外のstringの値は変更されません。ポインタ自体は値によって渡されます。stringVarchangeString

目的を達成する 1 つの方法は、ポインターをポインターに渡すことです。

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

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

おすすめ記事