2010-01-15 55 views
1

编辑:我卡在一次调用手动保留数组初始化后,并修复它。杜尔。谢谢。iPhone - 在appDidBecomeActive和运行循环开始之间数组丢失?

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

计时器的工作正常(即当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实例替换。不知道它来自哪里。我的任何事件处理方法都不会尝试重新分配数组或对其进行更改。任何想法可能会出错?我完全迷惑。

+0

你如何分配和分配你的数组到变量?你能发布代码吗? – 2010-01-15 17:38:02

+0

请说明如何实现'-printCount'。 – kennytm 2010-01-15 17:40:49

回答

2

您是否-retain数组?

+0

是的,这是一个保留的属性,在实现中合成。 – 2010-01-15 17:28:01

0

也许你的对象被释放?如果你保留它会发生什么。这是否工作,或者你只是得到一个内存泄漏?

0

将其10个元素替换为 单个UITouchData实例。不知道 它来自哪里。

它总是一个UITouchData实例吗?总是? - 因为这似乎是一个内存问题的死亡弃权(如果它不是每次同样的话)。

0

我卡在一个调用初始化后保留到数组中,并修复它。杜尔。

谢谢你的建议。像这样的问题通常会发生,这很简单,最后放弃并寻求帮助触发解决方案,并让我感到很蠢。 :D

0

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