关于ios中 NSString在方法中进行修改,需要传该NSString的指针的指针的问题

小呀小肥羊 2015-03-10 02:47:05
本人新学,请大家照顾下。。
假如有如下方法:


void changeStr(NSString **str2){
*str2 = @"123";
}
void my(NSString *ss){

NSLog(@"传入前的地址是%p -> %p -> %@",&ss,ss,ss);

//NSLog(@"%@",*ss);
//*(&(*ss)) = @"333";

}
int main(int argc, const char * argv[]) {
@autoreleasepool {

NSString *str = @"456";
changeStr(&str);
NSLog(@"%@",str);


NSString *s = @"123";
NSLog(@"传入前的地址是%p -> %p -> %@",&s,s,s);
changeStr2(s);
NSLog(@"%@",s);


}
return 0;
}


其中changeStr方法我是理解的。但是同时我在想,是不是可以不必要这么麻烦呢?
我在changeStr2方法中做了尝试,貌似是不行,想请教下大神,具体失败的原因。

我是这么想的,如果用这种方法是否可以呢?
传入之前:
名称 地址 内容
s 0x7fff5fbff760 0x100001040
传入之后:
名称 地址 内容
ss 0x7fff5fbff728 0x100001040

既然传入后的ss,内容仍然是原来字符串的地址,那么直接取ss指向内容,也就是@"123",取他的地址,然后在用@“123”的地址取值,再修改这个值,那么ss的指向也没有变化,原来s指向的字符串也变化了不是吗?
*(&(*ss)) = @"333";
请赐教。。不胜感激。。

...全文
226 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hslinux 2015-03-13
  • 打赏
  • 举报
回复

void changeStr(NSString **str2)
{
    *str2 = [[NSString alloc] initWithFormat:@"%s", "changeStrchangeStrchangeStrchangeStr"];
}
void my(NSString *ss){
    
    NSLog(@"传入前的地址是%p -> %p -> %@",&ss,ss,ss);
    *(&ss) = [[NSString alloc] initWithFormat:@"%s", "mymymymymymymymy"];
    NSLog(@"%@", ss);
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        NSString *str = [[NSString alloc] initWithFormat:@"%s", "456"];
        NSLog(@"before changeStr %@",str);
        changeStr(&str);
        NSLog(@"after changeStr %@",str);
        
        
        NSString *s = [[NSString alloc] initWithFormat:@"%s", "123"];
        NSLog(@"传入前的地址是%p -> %p -> %@",&s,s,s);
        my(s);
        NSLog(@"after my %@",s);
        
        
    }
    return 0;
}
OC对象的指针,跟C/C++的指针有比较大的差别的,如果非要在函数中处理字符串且通过参数返回改变后的值,建议使用char指针或数组做参数来处理。
Bannings 2015-03-12
  • 打赏
  • 举报
回复
引用 2 楼 funball99 的回复:
抱歉,写错了,changeStr2 就是这个my方法,我忘了改名。。。
恩,你想测试什么
小呀小肥羊 2015-03-12
  • 打赏
  • 举报
回复
抱歉,写错了,changeStr2 就是这个my方法,我忘了改名。。。
Bannings 2015-03-11
  • 打赏
  • 举报
回复
没看到changeStr2 方法。 你用@""实例化的字符串实际是一个常量(不可修改的),编译器对此有优化,常量字符串都是共享的。

29,031

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧