【问题标题】:How to assign another object to point single object? [duplicate]如何将另一个对象分配给指向单个对象? [复制]
【发布时间】:2012-08-13 13:16:54
【问题描述】:

可能重复:
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 不会得到反映。

怎么做?

【问题讨论】:

  • and...顺便说一句...你为什么要释放 str 两次?
  • 我也在检查保留计数值。即使在释放两次之后,它也没有抛出任何异常。艾米,我知道为什么?
  • @DarkFighter.. 您的链接没有回答我的问题.. 即使我已将其从 NSString 更改为 NSMutableString,它仍显示相同的旧值
  • 你把所有的 NSString 都改成 NSMutableString 了吗?包括你的方法的参数?和分配...

标签: iphone objective-c ios memory-management


【解决方案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";
}

【讨论】:

  • 在第二行我得到了错误 - i.imgur.com/Ux1Rz.png
  • 它在非 ARC 环境中工作。
  • 好吧好吧.....我认为ARC不允许直接分配给指针类型变量。
  • 可能是...我不使用 arc.. 我喜欢自己做所有的事情
  • 太棒了!如果您不介意,我会在需要时寻求您的帮助:-)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-06
    • 2019-12-27
    • 1970-01-01
    • 2021-05-02
    • 2016-06-24
    • 2011-12-24
    • 1970-01-01
    • 2020-11-10
    相关资源
    最近更新 更多