奇怪类型的NSZombie

时间:2012-11-12 03:15:24

标签: ios nszombie

所以我得到了一个N​​Szombie并且它说了这个

- [__ NSArrayI _cfTypeID]:发送到已解除分配的实例的消息

知道那是什么意思吗?虽然我认为它是一种NS型,但它可以说是一个阵列。

2 个答案:

答案 0 :(得分:3)

是的 - 那将是某种类型的数组。大多数基础类型不是单个类,而是类集群。因此,初始化数组的确切方式会严重影响您返回的NSArray的哪个子类。

确切的行为没有记录,并且基本上保证随着时间的推移而改变,但是例如,如果您创建了一个具有少于一定数量条目的不可变数组,那么系统可能决定返回单个链接数组并执行搜索作为简单的线性搜索。如果你创建一个高于阈值,那么它可能会创建一个数组,添加某种分层逻辑进行搜索(或者,更可能的是,如果用户开始尝试搜索数组,则包含创建合适的分层表的逻辑)。 p>

要学习的相关课程:

  • 永远不要尝试继承基础类;
  • 不要指望isMemberOfClass:正常工作;
  • 甚至不希望isKindOfClass:必须能够从基础类的可变版本中分辨出不可变的内容。

Apple需要一种方法来区分这些类并将它们标记为私有,因此您最终会得到下划线和后缀。在实践中,我认为__NSArrayI是一个不可变的数组。

答案 1 :(得分:1)

基本上这意味着您的NSArray对象已经被释放。 Foundation.framework中的某些内容试图访问您的NSArray私有方法_cfTypeID并崩溃。

关于为什么_cfTypeID对象中存在NSArray方法的问题。 NSArray核心基金会对象CFArray。两种类型可与“免费电话桥”互换。 所以实际上apple使用该方法进行内部使用。 如果你想更深入地了解这一点。你可以访问http://code.google.com/p/cocotron/source/browse/Foundation/NSArray/NSArray.m,这是Cocotron对NSArray的实现。 与apple的实现相同,但仍然类似。