通过参考传递值和传递

B K*_*B K 0 objective-c pass-by-reference nsstring

我在过去几天一直在研究一些基础知识,并且我意识到我从未真正理解为什么NSString/NSMutableString的传递引用不起作用.

- (void)testing{    

NSMutableString *abc = [NSMutableString stringWithString:@"ABC"];
[self testing:abc];
NSLog(@"%@",abc); // STILL ABC
}


-(void)testing:(NSMutableString *)str {
str = [NSMutableString stringWithString:@"HELP"];
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?我希望我的测试方法能够从main方法操作String.我一直在使用Mutable Arrays,字典等,并且工作正常.感觉奇怪,我从来没有意识到它如何与字符串一起使用.

但是这个值会改变,就像第一个字符串一样

NSMutableString *string1;
NSMutableString *string2;

string1 = [NSMutableString stringWithString: @"ABC"];
string2 = string1;

[string2 appendString: @" HELP"];

NSLog (@"string1 = %@", string1); // ABC HELP
NSLog (@"string2 = %@", string2); // ABC HELP
Run Code Online (Sandbox Code Playgroud)

new*_*cct 5

与Java一样,Objective-C只传递值并按值分配.也像Java一样,对象总是在指针后面(你永远不会把对象本身放到变量中).

分配或传递对象指针时,指针将被复制并指向与原始指针相同的对象.这意味着,如果对象是可变的(即它有一些方法可以改变其内容),那么你可以通过一个指针改变它,并通过另一个指针看到效果.始终通过调用方法或直接分配字段来实现变异.

-(void)testing:(NSMutableString *)str {
  [str setString:@"HELP"];
}
Run Code Online (Sandbox Code Playgroud)

分配给指针永远不会改变它指向的对象; 相反,它使指针指向另一个对象.