2012-08-13 88 views
1

可能重复:
NSString immutable allows to change its values?如何指定另一个对象来指向单个对象?

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

我已经做了一个示例,但它不工作。

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

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

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

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

如果我改变STR2的价值已经宣布,STR是没有得到体现。

如何做到这一点?

+3

http://stackoverflow.com/questions/1805442/nsstring-immutable-allows-to-change-its-values - 看看这个答案 – DarkFighter 2012-08-13 13:19:26

+0

和...顺便说一句..为什么你释放两次? – meronix 2012-08-13 13:26:24

+0

我还在检查保留计数值。即使释放两次后,也不会抛出任何异常。艾米我知道为什么? – Bharath 2012-08-13 13:27:39

回答

1

尝试下面的代码,

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

在第二行我得到错误 - http://i.imgur.com/Ux1Rz.png – TheTiger 2012-08-13 14:02:58

+0

可能是ARC错误.. – 2012-08-13 15:54:50

+0

我正在使用ARC ... – TheTiger 2012-08-14 05:34:45

0

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

相关问题