首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奇数型NSZombie

奇数型NSZombie
EN

Stack Overflow用户
提问于 2012-11-12 03:15:23
回答 2查看 116关注 0票数 0

所以我得到了一个NSzombie,上面写着

-__NSArrayI _cfTypeID:发送到解除分配的实例的消息

知道那是什么吗?假设是一个数组,虽然我认为如果它是NS类型,它会说。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-12 03:41:36

基本上,这意味着您的NSArray对象已经被释放了。Foundation.framework中有东西试图访问您的NSArray的私有方法_cfTypeID,然后崩溃了。

以及为什么在_cfTypeID对象中存在NSArray方法的问题。NSArray核心基金会对应的CFArray。两种类型的桥是可互换的“免费桥梁”。实际上,苹果将这种方法用于内部用途。如果你想对此有更深入的了解。您可以访问http://code.google.com/p/cocotron/source/browse/Foundation/NSArray/NSArray.m,这是Cocotron的NSArray实现。它是,与苹果的实现不一样,但实现仍然是相似的。

票数 1
EN

Stack Overflow用户

发布于 2012-11-12 03:32:55

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

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

需要吸取的相关经验教训:

  • 不要试图将基础类子类化;
  • 不要期望isMemberOfClass:能正常工作;
  • 甚至不必期望isKindOfClass:能够区分基础类的不可变版本和可变版本。

Apple需要一种方法来区分这些类,并将它们标记为私有类,这样您就可以得到下划线和后缀。实际上,我认为__NSArrayI是一个普通的不可变数组。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13337927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档