编辑:我在初始化后立即手动保留数组,并修复了它。杜尔。谢谢。
我在 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 实例替换。不知道它来自哪里。我的所有事件处理方法都不会尝试重新分配或更改数组。有什么想法可能会出错吗?我完全迷惑了。