使用NSMutableArray作为队列时出现奇怪的问题。
给定单例对象SO,ViewController对象VC和NSMutableArray MA。 MA被用作SO接收的ID的队列,并通过将ID放入MA并发送VC处理的通知来传递给VC。 MA失去了它所拥有的东西是个问题。
与问题有关的步骤:
第一次加载视图没有问题。然而,如果我走出视图并返回其中,重复步骤4中MA的大小上面的步骤是1,并且步骤5中MA的大小是0。 MA变空了!
我很惊讶MA在发送通知的时间(步骤4)和调用通知处理程序(步骤5)之间神秘地变为空。我已经检查过VC通知处理程序之外没有任何东西正在清除数组。
一个可能的线索是,有一个方法(来自obj C用语中的消息)来自viewDidLoad,如果注释掉所描述的问题就不会发生。此外,如果我在viewDidLoad中的方法之后放置以下行(而不是将其注释掉),那么问题就会停止:
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]];
我一直在摸不着头脑。我最近的想法是,我不明白有一些关于NSMutableArray的东西。我认为MA存储了对其中放置的ID的强引用,但如果不是那么可能会有一些奇怪的东西。
有人有想法吗?
答案 0 :(得分:0)
问题是每次VC的viewDidLoad完成时都会调用NSNotificationCenter addObserver:(步骤3)。这导致通知处理程序被添加多次,即使通知本身只发布一次。
以下是相关的:How to stop the Observer in NSNotification to called twice?