gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:49:01 24 4
gpt4 key购买 nike

我启动了一个小型 Xcode 项目来研究 NSMutableString 属性应该是 copy 还是 retain。我使用 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 属性声明我的 NSMutableString 属性并使用 copy 声明我的 NSString 属性?

最佳答案

你是对的,NSMutableStringcopy 方法返回一个不可变 NSString。这是 Cocoa 中的约定,它也适用于 NSMutableArrayNSMutableDictionary

因此,如果您希望您的属性保持可变,您应该将其声明为retain。如果您需要复制语义,但仍希望结果可变,则必须为属性实现自己的 setter (并使用 mutableCopy 进行复制)。

您经常看到字符串属性的 copy 的原因是,通常需要保证字符串是不可变的,而不管分配给该属性的字符串是什么类型。否则,您可能最终会在其他地方不小心修改相同的字符串,这可能很难调试。不可变对象(immutable对象)还具有线程安全的优势。

关于objective-c - 尝试使用复制的 NSMutableString 属性会导致异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11992742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com