如果我对一个对象进行更改,我想指向一个对象。同样的变化必须反映到其他对象。怎么做?
我做了一个样本,但它没有用。
请检查一次代码。我的代码中有什么错误?
-(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就不会被反映出来。
怎么做?
答案 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用于你的目的)