objective-c - 如何识别可变对象?

标签 objective-c cocoa immutability introspection

<分区>

在我的应用程序中,有时我需要识别可变对象以适本地处理它们。事实证明,这比看起来要困难得多。

如果我在 NSString 上使用 isKindOfClass:[NSMutableString class],所有字符串似乎都是可变的。

如果我问他们是否响应 @selector(appendString:),他们都会响应。

如果我真的尝试在 @try...@catch...@finally block 中改变它们,事实是透露。然而,它非常不优雅且非常慢。

什么是最好的行动方案?

最佳答案

如果您想忽略可变性,您可以遍历循环并使用 -mutableCopy 为每个字符串制作可变副本(无论如何,它都会创建 NSMutableStrings)。反之亦然:通过向每个对象发送 -copy,您可以保证获得不可变的 NSString。不幸的是,由于 NSString 是一个类簇,可变性不是一个完全可测试的概念。使用 @"__NSCFString" 行检查类是非常不安全的,因为 Apple 有权随时更改基础类。

关于objective-c - 如何识别可变对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15347061/

相关文章:

ios - TableView 不显示来自 parse.com 的数据

xcode - Xcode 4 中的自定义图标存储在哪里?

objective-c - 使用 NSScanner 将 NSString 转换为 int 值

java - 使用泛型方法创建不可变的基础

javascript - 嵌套的纯函数还是纯函数吗?

ios - 带插图的居中 UIButton 图像

objective-c - 如何获取 -textStorageDidProcessEditing :? 内可见的字符范围

ios - Object1.position.y = Object2.position.y?

cocoa - 捕获一个 View 并输出到另一个 View

functional-programming - Raku/Rakudo 包含哪些持久数据结构?