【发布时间】:2013-01-19 09:56:29
【问题描述】:
我想知道NSMutableString中nil和@""的区别。
我需要每秒清理一次NSMutableString 中的字符串值。
所以
myMutableString = nil;
或
myMutableString = @"";
哪个更好清洁,为什么?
【问题讨论】:
-
这闻起来像作业嗅
标签: ios nsmutablestring
我想知道NSMutableString中nil和@""的区别。
我需要每秒清理一次NSMutableString 中的字符串值。
所以
myMutableString = nil;
或
myMutableString = @"";
哪个更好清洁,为什么?
【问题讨论】:
标签: ios nsmutablestring
更新
在可变字符串的情况下,您必须首先像这样分配/初始化它:
NSMutableString *myMutableString = [[NSMutableString alloc] init];
也许你已经这样做了,但是你必须像这样重置字符串:
[myMutableString setString: @""];
所以不要写myMutableString = @"",而是使用上面的代码。
如果您将myMutableString 分配给nil,则它不是有效的指针/对象,并且无法响应消息或操作。如果你真的设置为@"",它是一个完全有效的可以响应消息、方法和动作的对象,它只是包含一个长度为0的字符串。
myMutableString = nil;
[myMutableString appendString: @"It now contains a valid string!"];
这不可能发生,因为字符串是nil
myMutableString = @"";
[myMutableString appendString: @"It now contains a valid string!"];
这可能会发生,myMutableString 是一个有效对象并且可以响应消息。你猜怎么着,它现在有了一个字符串!
所以,一个字符串对象仍然可以被初始化并且有一个没有任何字符的实际字符串值。就像一个数组可以是有效的并且里面有 0 个对象一样。不然怎么加进去!?
但是,在NSMutableString 的场景中,您可能必须实际分配初始化它......请有人澄清一下。
显然,分配给@"" 更好,但它实际上取决于您的情况。我不知道您为什么要分配给nil,除非您将变量重新分配给一个新的字符串对象。
【讨论】:
[@"" appendString: @"It now contains a valid string!"] 将抛出无法识别的选择器异常
@"" 是 NSString 不是 NSMutableString。 *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“尝试使用 appendString 改变不可变对象:”
没有一个
使用
[myMutableString setString: @""];
重置你的字符串。
您的对象保持不变。您调用一个清除其内容的方法。
【讨论】: