Null
设置为时会发生什么NSString
?并保存在NSUserDefaults
?? 它会崩溃,因为它将它视为一个已释放的实例?
2 回答
现在,如果您要说的是“将 NSString 指针设置为 Null 时会发生什么”,那在一定程度上取决于您所说的“Null”(这不是标准的 Objective-C 术语)的含义。
“Null”可以表示“nil”(具有“null”和“NULL”的 C 别名),也可以表示 NSNull 对象。
“nil”是一个“空指针”——全为零。这意味着指针不引用任何对象。“NSNull”是一个对象类,它的唯一(“单例”)实例用于表示“无”,即使有一个真实的对象表示它。
您可以轻松地将 NSString 指针(即声明的东西NSString *
)设置为 nil。(注意,“nil”周围没有引号!)这使得指针“空”。
您还可以通过强制转换将 NSString 指针设置为指向 NSNull 对象,尽管这并不常见。
(当然,您可以将 NSString 指针设置为“空字符串” -- @""
。这是一个真正的零长度字符串,与 nil/null 没有真正的关系。)
由于“局部”变量(在方法中声明的变量)在输入方法时不会被编译器隐式置零,因此在方法输入时将声明的指针显式设置为 nil 通常是一种好习惯,这样,如果它们最终没有得到设置(但确实被引用),它们不会包含会产生神秘错误的“垃圾”。
你在混合隐喻。首先,散布一些关于对象类型的 NSLog 消息,然后保存然后检索(NSStringFromClass[obj class])。如果您使用的是基于 C 的 SQLite 接口或带有 SQLite 后备存储的 Core Data,您没有明确说明,因此请更新您的问题。
最后,如果您向 A 类的对象发送只有 B 类响应的消息,您将收到指出该错误的异常。解除分配的错误完全不同,表明您的内存管理有问题。要追踪后一个错误,请启用 Zombies 并中断发送给其中的任何消息(有关如何在此处执行此操作的许多问答)。