当Null设置为NSString时会发生什么?

时间:2013-04-14 12:17:30

标签: ios objective-c memory-management

Null设置为NSString时会发生什么?并保存在NSUserDefaults ??它会崩溃,因为它将它视为一个解除分配的实例??

2 个答案:

答案 0 :(得分:1)

现在,如果您要说的是“当您将NSString指针设置为Null时会发生什么”,这取决于您的“Null”(这不是标准的Objective-C术语)的含义。 / p>

通过“Null”你可能意味着“nil”(它的C别名为“null”和“NULL”)或者你可能意味着一个NSNull对象。

“nil”是一个“空指针” - 全为零。这意味着指针不引用任何对象。 “NSNull”是一个对象类,其唯一(“单例”)实例用于表示“无”,即使有一个真实对象表示这一点。

您可以轻松地将NSString指针(即声明为NSString *的内容)设置为nil。 (注意,“nil”周围没有引号!)这使指针“空”。

您还可以使用强制转换设置NSString指针以指向NSNull对象,但这种做法并不常见。

(当然,您可以将NSString指针设置为“空字符串” - @""。这是一个零长度的实际字符串,与nil / null并不真正相关。)< / p>

由于在输入方法时,编译器没有隐式地将“局部”变量(在方法内声明的变量)归零,因此在方法入口上将声明的指针显式设置为nil通常是很好的做法,这样,如果他们不这样做最终得到设定(但要引用),它们不会包含可能产生神秘错误的“垃圾”。

答案 1 :(得分:0)

你正在混淆隐喻。首先,在保存然后进行检索(NSStringFromClass [obj class])之前,在报告对象类型的一些NSLog消息周围。如果您使用基于C的SQLite接口或Core Data与SQLite后备存储,您没有说清楚,所以更新您的问题。

最后,如果您使用只有B类响应的消息向A类对象发送消息,您将获得指出该错误的异常。解除分配的错误完全不同,表明您的内存管理有问题。要追踪后一个错误,请启用Zombies并将任何消息发送到一个(许多Q&amp; As如何在此处执行此操作)。