我试图理解 Objective-C 中的取消引用,并在下面写了两种方法。
-(void)alterStringModelOne:(NSMutableString**)string{
NSMutableString *str = [NSMutableString stringWithString:@"New string by string = &str"];
string = &str; //Didn't work
}
-(void)alterStringModelTwo:(NSMutableString**)string{
NSMutableString *str = [NSMutableString stringWithString:@"New string by *string = str"];
*string = str; //It works
}
在上面,ModelOne 不起作用,而 ModelTwo 起作用。这两种说法有何不同?
编辑:追踪他们的地址和类型
myStr = b260 类型 * CFString
---> 进入方法模型一
string = d9c4 of type ** NSMutableString //参数
str = f750 of * CFString //str创建后
string = d97c of type ** NSMutableString //赋值后:string = &str;
--> 方法返回
myStr = b260 * CFString
--> 进入方法模型二
string = d9c4 of type ** NSMutableString //参数
str = 0bc0 of * CFString //str创建后
string = 0bc0 of type * CFString //赋值后:*string = str;
--> 叶方法
myStr = 0bc0类型 * CFString