web-dev-qa-db-ja.com

目的C:NSStringでNSMutableStringを変換する

NSMutableStringがありますが、NSStringに変換するにはどうすればよいですか?

61
CrazyDev

次のいずれかを介して:

NSString *immutableString = [NSString stringWithString:yourMutableString];

または経由:

NSString *immutableString = [[yourMutableString copy] autorelease];
//Note that calling [foo copy] on a mutable object of which there exists an immutable variant
//such as NSMutableString, NSMutableArray, NSMutableDictionary from the Foundation framework
//is expected to return an immutable copy. For a mutable copy call [foo mutableCopy] instead.

NSStringのサブクラスであるが、NSStringにキャストするだけです。

NSString *immutableString = yourMutableString;

実際には可変のままですが、不変に見えます。
多くのメソッドは、不変インスタンスを返すように宣言されているにもかかわらず、実際に可変インスタンスを返します。

95
Regexident

NSMutableStringNSStringのサブクラスであるため、型キャストすることができます。

NSString *string = (NSString *)mutableString;

この場合、stringmutalbeStringのエイリアスになりますが、コンパイラで可変メソッドを呼び出そうとすると文句を言います。

また、クラスメソッドで新しいNSStringを作成できます。

NSString *string = [NSString stringWithString:mutableString];
4
Jose Ibanez