1

可能重复:
NSString 不可变允许更改其值?

如果我对一个对象进行更改,我想指向一个对象。相同的变化必须反映到其他对象。怎么做?

我做了一个样本,但它不起作用。

请检查一次代码。我的代码有什么错误?

-(void)viewDidLoad{ 
    str = [[NSString alloc] initWithString:@"Taruni"];   
    str2=str;  
    str2=@"Kalpana chawla";  
    [self changeStr:str];  
    NSLog(@"str = %@",str);
    [str release];  
    [str release];   
    [super viewDidLoad];    
}  
-(void)changeStr:(NSString *)x  
{   
    x=@"Chandra";  
}  

在.h文件中,我以这种方式声明

@property(nonatomic,assign) NSString *str;
@property(nonatomic,assign) NSString *str2; 

如果我更改 str2 的值,str 不会得到反映。

怎么做?

4

2 回答 2

1

试试下面的代码,

-(void)viewDidLoad{
    NSString *str = [[NSString alloc] initWithString:@"Taruni"];
    NSString **str2 = &str;
    *str2=@"Kalpana chawla";
    [self changeStr:&str];
    NSLog(@"str = %@",str);
    [str release];
    [str release];
    [super viewDidLoad];
}
-(void)changeStr:(NSString **)x
{
    *x=@"Chandra";
}
于 2012-08-13T13:32:49.153 回答
0

首先,如果你想改变一个字符串的内容,你需要 NSMutableString。其次,在您的 changeStr: 方法中,您什么也没做,只是将“x”指针分配给另一个字符串(并且 x 是本地的)。在方法中,您的指针“x”是本地的,而分配 (x = something) 不会反映在该方法之外。如果你想改变外部的东西,你将不得不使用 x.propertyName 或 [x methodName]。如果你想改变你的输入,它指向什么字符串,你需要输入:(NSString **)x,然后*x = @“Chandra”和[self changeStr:&str]。第三,你不能改变常量字符串(定义如下:@"constant string"),你必须使用 [NSString stringWithFormat:@"%@", str] (而不是 NSMutableString 为你的目的)

于 2012-08-13T13:28:06.517 回答