@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属性会导致异常所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)