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

Tim*_*ddy 2 memory-management objective-c automatic-ref-counting

我有一个iVar NSMutableArray* _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)来从调度队列selfdealloc方法...所以这是一个存储器管理问题...

小智 5

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

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

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