如何指定另一个对象指向单个对象?

时间:2012-08-13 13:16:55

标签: iphone objective-c ios memory-management

  

可能重复:
  NSString immutable allows to change its values?

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

我做了一个样本,但它没有用。

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

-(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就不会被反映出来。

怎么做?

2 个答案:

答案 0 :(得分: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";
}

答案 1 :(得分:0)

首先,如果要更改字符串的内容,则需要NSMutableString。 第二,在你的changeStr:方法中你什么都没做,只是指定了“x”指针指向另一个字符串(而x是本地的)..在方法中你的指针“x”是本地的,赋值(x = something)不会反映在那种方法之外。如果要更改外部的内容,则必须使用x.propertyName或[x methodName]。如果你想改变你的输入是什么字符串指向,你需要输入:(NSString **)x,然后* x = @“Chandra”和[self changeStr:& str]。 第三,你不能改变常量字符串(定义如下:@“常量字符串”),你必须使用[NSString stringWithFormat:@“%@”,str](而不是NSMutableString用于你的目的)