7

私のアプリケーションでは、ある時点で、変更可能なオブジェクトを特定して、それらを適切に処理する必要があります。これは、見た目よりも難しいことが判明しました。

で使用isKindOfClass:[NSMutableString class]するとNSString、すべての文字列が変更可能に見えます。

に反応するかどうか尋ねると@selector(appendString:)、全員が反応します。

@try実際に……ブロックで変異させてみると、真相がばれます@catch@finallyしかし、それは非常に洗練されておらず、非常に遅いです。

最善の策は何でしょうか?

4

1 に答える 1

2

変更可能性を無視したい場合は、ループを反復処理して、各文字列の変更可能なコピーを作成できます-mutableCopy(これにより、何があっても NSMutableStrings が作成されます)。その逆です-copy。すべてのオブジェクトに送信することで、不変の NSString を取得することが保証されます。残念ながら、NSString はクラス クラスターであるため、可変性は明確にテストできる概念ではありません。@"__NSCFString"Apple はいつでも基礎となるクラスを変更する権利を持っているため、その行でクラスをチェックすることはうんざりするほど安全ではありません。

于 2013-03-11T20:13:36.993 に答える