iPhone - 数组在appDidBecomeActive:和运行循环启动之间丢失了吗?

时间:2010-01-15 17:21:22

标签: iphone nsmutablearray runtime-error nsrunloop runloop

编辑:我在一次调用中坚持在初始化之后手动保留数组,然后修复它。杜尔。感谢。

我在一个UIScrollView子类中保留了一个NSMutableArray,并且我添加了一个UIImageView子类的实例,因为每个子类都被添加为子视图。它需要是一个可变数组,因为我计划最终在数组中重新排列它们的顺序;在我尝试这样做之前就已经发生了这个错误。我已经使用NSLogs来显示该数组已经计数10,直到并且包括applicationDidBecomeActive:在我的AppDelegate中被调用,并添加了一个计时器来在运行循环中触发每0.001s。第一次发射,它再也找不到阵列了!我非常困惑,一直试图追踪这几个小时。

计时器工作正常(即当printCount:不访问数组时,没关系),只有当我尝试访问那里的数组时它才会中断。对printCount的常规调用:下面有效,但第一次定时器触发我在printCount的这两次调用之间可能发生什么:?

- (void)applicationDidBecomeActive:(UIApplication *)application {
    NSTimer *timer = [[NSTimer scheduledTimerWithTimeInterval:0.001f
                                                       target:[viewController view]
                                                     selector:@selector(printCount)
                                                     userInfo:nil
                                                      repeats:YES]
                      retain];
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
    [[viewController view] printCount];
}

我一直在用调试器无休止地执行程序。从这一点开始,数组是正确的,即使内容发生变化,其内存地址也是一样的。但是,之后只有对象 - 它的10个元素被单个UITouchData实例替换。不知道它来自哪里。我的事件处理方法都没有尝试重新分配数组或更改它。什么想法可能会出错?我完全神秘了。

5 个答案:

答案 0 :(得分:2)

你有-retain阵列吗?

答案 1 :(得分:0)

也许你的对象被释放了?如果保留它会发生什么。这有用还是只是内存泄漏?

答案 2 :(得分:0)

  

它的10个元素被a替换   单个UITouchData实例。不知道   来自哪里。

它总是一个UITouchData实例吗?总是? - 因为内存问题似乎是一个死的赠品(如果不是每次都是SAME)。

答案 3 :(得分:0)

我在初始化之后一直保持对阵列的保留,并修复了它。 DUR。

感谢您的建议。正如通常会发生这样的问题,它非常简单,最后放弃并寻求帮助触发解决方案并让我感到愚蠢。 :d

答案 4 :(得分:0)

视图是否初始化并释放数组?
你确定NSView之间没有发布吗? 每次定时器调用[viewController view]时,您都可以检查printCount(= {self printCount内)的内存地址是否相同。