2

我有一个 iVarNSMutableArray* _syncModels并且在我的类的 init 方法中我初始化它就像_syncModels = [[NSMutableArray alloc] initWithCapacity:10];

在整个课程中,我在数组中添加和删除对象,但我从未重新初始化_syncModels.

所以我得到了这个崩溃报告,上面写着-[NSConcreteData filterUsingPredicate:]: unrecognized selector sent to instance 0x23c740c0

符号化后,导致此崩溃的行是[_syncModels filterUsingPredicate:[NSPredicate predicateWithFormat:@"NOT (dataManagerFieldRecord = nil)"]];

世界上怎么_syncModels能从一个NSMutableArray变成一个NSConcreteData

这种特殊的崩溃很少见,但我们会遇到更多这样的崩溃,其中一些对象被打乱并被发送一条它无法处理的消息。

我们的目标是 ARC 下的 6.1。

编辑

我发现了问题......我无意中将self(拥有对 的引用_syncModels)从self'sdealloc方法添加到调度队列......所以这是一个内存管理问题......

4

1 回答 1

5

什么条件会导致 iVar 更改其类型?

我能想象的唯一情况是程序员在源代码中修改了它的类型并重新编译它。

您的意思是存储在 ivar 中的指针指向的对象已更改。这是一个典型的内存管理错误,它通常意味着您期望存在的对象已经过早地被释放(因为您没有保留对它的足够引用),然后运行时在创建时重用了它的底层内存块需要一个新对象。

于 2013-02-27T16:42:07.587 回答