【发布时间】:2012-01-23 04:07:44
【问题描述】:
我只是提出了一个错误的答案(已删除)
代码是为了响应这个question。 OP想知道他们为什么得到一个 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“尝试使用 setString 改变不可变对象:
(我的回答是我没有注意自己在做什么,很累而且还在学习。通常的借口。:-))
当他们试图设置可变字符串时:
[firstName setString:@""];
该属性是一个 NSMutableString
@property (copy,nonatomic) NSMutableString* firstName
我发布了一些对我有用的代码。但是误以为 getter 是 setter。 (我还是新手,很累:-))
现在令人困惑的是,一旦有人指出我错了。我重新查看了我的代码并意识到我做了什么。
但在我的项目中,我只合成了 setter 而没有声明。
@synthesize firstName =_firstName;
我已经像这样声明了吸气剂:
-(NSMutableString *)firstName{
if (!_firstName) _firstName = [[NSMutableString alloc]init];
return _firstName;
}
但是没有我声明一个二传手,一切都没有问题。您应该为可变对象和(副本)的属性做什么
如果在里面放一个setter:
-(void)setFirstName:(NSMutableString *)mutableString{
_firstName = mutableString ;
}
它仍然可以正常工作。 我用调用:
[self.firstName setString:@"some words"];
当我认为我第一次删除 getter 并离开 setter 时,我确实得到了一次异常。 但我不能重复错误!
我希望这很清楚..
有谁知道发生了什么。在这种情况下,我是否正确地执行了 setter 和 getter。
谢谢
【问题讨论】:
标签: objective-c ios getter-setter nsmutablestring