objective-c – 尝试使用复制的NSMutableString属性会导致异常

objective-c – 尝试使用复制的NSMutableString属性会导致异常,第1张

概述我启动了一个小型 Xcode项目来调查是否应该复制或保留NSMutableString属性.我用copy属性声明了我的属性: @property (nonatomic,copy) NSMutableString *stringA; 然后将其初始化为self.stringA = [NSMutableString new]; 终于试着设置一个字符串[stringA setString:@“A”];. 我启动了一个小型 Xcode项目来调查是否应该复制或保留NSMutableString属性.我用copy属性声明了我的属性:

@property (nonatomic,copy) NSMutableString *stringA;

然后将其初始化为self.stringA = [NSMutableString new];

终于试着设置一个字符串[stringA setString:@“A”];.

但是程序给出了,

“Terminating app due to uncaught exception ‘NSinvalidargumentexception’,reason: ‘Attempt to mutate immutable object with setString:'”

是因为结果字符串是Nsstring吗?这是否意味着我应该使用retain属性和Nsstring属性使用copy声明我的NSMutableString属性?

解决方法 你是对的,NSMutableString的复制方法返回一个不可变的Nsstring.这是Cocoa中的约定,它也适用于NSMutableArray,NSMutableDictionary等.

因此,如果您希望您的财产保持可变,您应该将其声明为保留.如果你需要复制语义,但仍然希望结果是可变的,你必须为属性实现自己的setter(并使用mutablecopy进行复制).

您通常看到字符串属性的副本的原因是,通常需要保证字符串是不可变的,无论为该属性分配何种类型的字符串.否则,您最终可能会意外地在其他地方修改相同的字符串,这可能很难调试.不可变对象还具有线程安全的好处.

总结

以上是内存溢出为你收集整理的objective-c – 尝试使用复制的NSMutableString属性会导致异常全部内容,希望文章能够帮你解决objective-c – 尝试使用复制的NSMutableString属性会导致异常所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1013809.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存