目标C-按值传递并按引用传递 [英] Objective C - Pass by value and pass by reference
问题描述
首先,很抱歉这个简单的问题.但是我需要了解发生了什么.
First of all, sorry for this simple question. But I need to understand what is happening.
我认为输出应为 upper case string
.但这是 UPPER CASE STRING
.
I thought the output should be upper case string
. But it comes out to be 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];
}
正在发生什么以及如何解决?
What is happening and how to fix it?
推荐答案
[string lowercaseString]
调用创建一个 new NSString
对象,您将该对象分配给局部变量string
.这不会在changeString
函数之外更改stringVar
的值.指针本身按值传递.
The [string lowercaseString]
call creates a new NSString
object that you assign to the local variable string
. This does not change the value of stringVar
outside the changeString
function. The pointer itself is passed by value.
一种执行所需操作的方法是将指针传递给指针:
One way to do what you want, is to pass a pointer to a pointer:
-(void) test
{
NSString *stringVar = @"UPPER CASE STRING";
[self changeString:&stringVar];
NSLog(@"value after changed : %@", stringVar);
}
-(void) changeString:(NSString**)string
{
*string = [*string lowercaseString];
}
这篇关于目标C-按值传递并按引用传递的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!