我有一个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
的引用)添加到self
的{{1}}方法的调度队列中......所以这是一个内存管理问题......
答案 0 :(得分:5)
什么条件会导致iVar更改其类型?
我能想象的唯一情况是程序员在源代码中修改它的类型并重新编译它。
你的意思是存储在ivar中的指针所指向的对象已被更改。这是一个典型的内存管理错误,它通常意味着你期望在那里的对象已经过早释放(因为你没有保留足够的引用),然后运行时在需要创建新对象时重用其底层内存块。