1

编辑:我在初始化后立即手动保留数组,并修复了它。杜尔。谢谢。

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

计时器工作正常(即当 printCount: 不访问数组时,这很好),只有当我尝试访问那里的数组时它才会中断。对 printCount: 的常规调用有效,但第一次触发计时器时 I 这两个对 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 实例替换。不知道它来自哪里。我的所有事件处理方法都不会尝试重新分配或更改数组。有什么想法可能会出错吗?我完全迷惑了。

4

5 回答 5

2

你做-retain阵列了吗?

于 2010-01-15T17:25:00.663 回答
0

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

于 2010-01-15T17:25:04.810 回答
0

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

它总是一个 UITouchData 实例吗?总是?- 因为这看起来像是一个内存问题的死的放弃(如果它不是每次都一样的话)。

于 2010-01-15T17:29:56.493 回答
0

我在初始化后立即调用保留数组,并修复了它。杜尔。

感谢您的建议。像这类问题通常发生的那样,它非常简单,最后屈服并寻求帮助会触发解决方案,让我觉得自己很愚蠢。:D

于 2010-01-15T17:37:55.853 回答
0

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

于 2010-01-15T17:38:18.187 回答