目标C-按值传递并按引用传递 [英] Objective C - Pass by value and pass by reference

查看:157
本文介绍了目标C-按值传递并按引用传递的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,很抱歉这个简单的问题.但是我需要了解发生了什么.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆