首先,对这个简单的问题感到抱歉。但是我需要了解正在发生的事情。

我认为输出应为 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];
}

关于ios - objective-c -按值传递并按引用传递,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11737505/

10-10 18:53