NSStringをNSMutableStringに初期化する方法は?
-
08-07-2019 - |
質問
NSStringをNSMutableStringに初期化する方法はありますか?また逆の順序ですか?
-(void)st:(NSString *)st
{
NSMutableString str = st; // gives warning..
NSLog(@"string: %@", str);
}
解決
NSString
は不変の表現です(最悪の場合は読み取り専用ビュー)。したがって、可変であることがわかっている場合は NSMutableString
にキャストするか、可変コピーを作成する必要があります。
-(void)st:(NSString *)st
{
NSMutableString *str = [[st mutableCopy] autorelease];
NSLog(@"string: %@", str);
}
mutableCopy が保持カウント1で新しく初期化されたコピーを返すため、自動リリースしました。
他のヒント
NSString *someImmutableString = @"something";
NSMutableString *mutableString = [someImmutableString mutableCopy];
重要! mutableCopy
は所有するオブジェクトを返すので、それを解放するか自動解放する必要があります。
NSMutableStringをNSStringに設定できますが、その逆はできません
NSString *str = [NSMutableString alloc]init];
大丈夫ですが、
NSMutableString *str = [[NSString alloc]init];
ではありません。これは、NSMutableStringがNSStringのサブクラスであるため、NSStringであるためです。 ただし、
を使用してNSStringから可変文字列を作成できます。NSMutableString *mStr = [str mutableCopy];
Swift 2.0
Swiftユーザーの場合、Xcode 7では以下が機能します。
var str : String = "Regular string"
var mutableStr : NSMutableString = NSMutableString(string: str)
所属していません StackOverflow