首先,对这个简单的问题感到抱歉。但是我需要了解正在发生的事情。
我认为输出应为 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/