在我的应用程序中,在某些时候,我需要识别可变对象以适当地处理它们。事实证明这比看起来更难。
如果我在isKindOfClass:[NSMutableString class]
上使用NSString
,则所有字符串似乎都是可变的。
如果我问他们是否回复@selector(appendString:)
,他们都会回复。
如果我真的试图在@try
... @catch
... @finally
区块中改变它们,那么事实就会揭晓。然而它非常不优雅且非常慢。
什么是最好的行动方案?
答案 0 :(得分:2)
如果您想忽略可变性,可以遍历循环并使用-mutableCopy
创建每个字符串的可变副本(无论如何,创建NSMutableStrings)。相反的情况是:通过向每个对象发送-copy
,您可以保证获得不可变的NSString。遗憾的是,由于NSString是一个类集群,因此可变性不是一个干净的可测试概念。检查具有@"__NSCFString"
行的班级令人厌恶不安全,因为Apple有权随时更改基础班级。