【问题标题】:What Happens When Null is set to NSString?? [closed]当 Null 设置为 NSString 时会发生什么? [关闭]
【发布时间】:2013-04-06 14:39:05
【问题描述】:

Null 设置为NSString 时会发生什么?并保存在NSUserDefaults??它会因为将其视为已释放的实例而崩溃吗??

【问题讨论】:

  • 你试过了吗?
  • 你的意思是NULL还是[NSNull null];
  • 是的,我有一个从中获取的 sqlite 数据库,当我打印出来时它返回 Null,然后在从 userdefault 获取后显示 -[CFString respondsToSelector:]: message sent to deallocated实例
  • 打印时显示(null)我不知道从 sqlitedatabase 究竟返回了什么
  • 你不能那样做。说“将Null设置为NSString”是没有意义的。

标签: ios objective-c memory-management


【解决方案1】:

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

“Null”可以表示“nil”(具有“null”和“NULL”的 C 别名),也可以表示 NSNull 对象。

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

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

您还可以通过强制转换设置一个 NSString 指针以指向 NSNull 对象,尽管这并不常见。

(当然,您可以将 NSString 指针设置为“空字符串”——@""。这是一个真正的零长度字符串,与 nil/null 没有真正的关系。)

由于“局部”变量(在方法中声明的变量)在进入方法时不会被编译器隐式置零,因此在方法进入时将声明的指针显式设置为 nil 通常是一种好习惯,这样,如果它们没有t 最终被设置(但确实被引用),它们不会包含可能产生神秘错误的“垃圾”。

【讨论】:

    【解决方案2】:

    你在混合隐喻。首先,散布一些关于对象类型的 NSLog 消息,然后保存然后检索(NSStringFromClass[obj class])。如果您使用的是基于 C 的 SQLite 接口或带有 SQLite 后备存储的 Core Data,您并没有明确说明,因此请更新您的问题。

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

    【讨论】:

      猜你喜欢
      • 2013-09-08
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多