我有一个NSMutableString,如何将它转换为NSString?
我有一个NSMutableString,如何将它转换为NSString?
可以通过以下方式之一:
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;
虽然实际上它是可变的,但会看起来像是不可变的。
很多方法声明返回不可变实例,但实际上返回的是可变实例。
NSString
(实际上是NSMutableString
),那么当用户修改NSString
对象时,他们不知道对象本身也会被改变,对吧?所以这个工作会产生一些副作用吗?谢谢 :) - hqtNSString *
的形式出现的 NSMutableString *
不能被修改,除非将其强制转换回 NSMutableString *
。如果一个方法的签名表示它返回不可变对象,但你将其强制转换为可变对象,则你依赖于实现细节,更糟糕的是,你有意破坏了可变性约定,因此对由此造成的任何损害负有责任。只要遵守规则,就是安全的(99%)。永远编写代码,就好像你从未看过除当前正在编辑的文件之外的任何 .m
文件一样。嗯,其实你可能应该知道,但你的代码不应该知道。 - RegexidentNSMutableString
是 NSString
的子类,所以你可以将其强制类型转换:
NSString *string = (NSString *)mutableString;
string
将是mutableString
的别名,但如果您尝试调用任何可变方法,则编译器会报错。NSString *string = [NSString stringWithString:mutableString];