使用NSMutableArray作为队列不起作用

时间:2015-02-05 06:40:17

标签: objective-c uiviewcontroller nsmutablearray

使用NSMutableArray作为队列时出现奇怪的问题。

给定单例对象SO,ViewController对象VC和NSMutableArray MA。 MA被用作SO接收的ID的队列,并通过将ID放入MA并发送VC处理的通知来传递给VC。 MA失去了它所拥有的东西是个问题。

与问题有关的步骤:

  1. 启动Seque以加载视图。
  2. SO从服务器请求ID。
  3. VC的viewDidLoad完成
  4. SO块功能接收ID并将其放入MA,并向VC发送通知。
  5. VC收到通知并从MA
  6. 检索ID

    第一次加载视图没有问题。然而,如果我走出视图并返回其中,重复步骤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的强引用,但如果不是那么可能会有一些奇怪的东西。

    有人有想法吗?

1 个答案:

答案 0 :(得分:0)

问题是每次VC的viewDidLoad完成时都会调用NSNotificationCenter addObserver:(步骤3)。这导致通知处理程序被添加多次,即使通知本身只发布一次。

以下是相关的:How to stop the Observer in NSNotification to called twice?