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)
与Java一样,Objective-C只传递值并按值分配.也像Java一样,对象总是在指针后面(你永远不会把对象本身放到变量中).
分配或传递对象指针时,指针将被复制并指向与原始指针相同的对象.这意味着,如果对象是可变的(即它有一些方法可以改变其内容),那么你可以通过一个指针改变它,并通过另一个指针看到效果.始终通过调用方法或直接分配字段来实现变异.
-(void)testing:(NSMutableString *)str {
[str setString:@"HELP"];
}
Run Code Online (Sandbox Code Playgroud)
分配给指针永远不会改变它指向的对象; 相反,它使指针指向另一个对象.
| 归档时间: |
|
| 查看次数: |
1838 次 |
| 最近记录: |