2012-07-24 82 views
1

我一直工作在一个应用程序的月数的现在和奇怪的错误已经出现在过去的两个星期。在延长使用应用程序(20-30分钟)之后,我们的许多自定义标签(基于UILabel)停止正确渲染(有些只会显示空白)。有趣的是,在这种情况下,造就了键盘显示如下:iPad的键盘渲染 - 缺字母/键

enter image description here

我已经尝试了一些调整过与无济于事代码库的各个部分的最后几个星期,我希望,这里的某个人在遇到过类似的问题之前可能会遇到困难,并且/或者可能会在哪里寻找解决方案。

我们正在利用我们的自定义标签内大量的CoreGraphics中调用render一些相当复杂的注解字符串,并有交通在另一个线程在后台来回到服务器的相当数量。关于内存,我们正在使用ARC,同时我们在任何时候都在内存中保留了大约5-10Mb的原始数据 - 我无法想象其他任何东西都在咀嚼大量内存。

上哪里找将不胜感激任何意见。

回答

2

哦,不是这个确切的问题,但类似的真正怪异的东西,在一个窗口中可见。它被追踪到从主线程以外的消息传递UIKit。我们最后添加了很多很多“assert([NSThread isMainThread]);”在我们认为可能在屏幕上绘画的地方,果然,我们找到了罪恶派对。

+0

+1用于突出显示UI调用需要位于主线程上。 – Cthutu 2012-07-24 17:13:54

+0

非常感谢指针,我今天会调查一下,看看我们的任何网络或其他线程代码是否可能调用任何UIKit方法!这样一个奇怪的错误! – 2012-07-25 09:23:12

+1

当你发现问题,请让我们知道它是什么! – 2012-07-25 11:31:44

2

在不同的线程使UI调用的问题,我想我可能添加的这段代码展示一个不同的线程如何使UI电话。

dispatch_sync(dispatch_get_main_queue(), ^{ 
    // Put your UI code here 
}); 

这将确保您的代码在运行循环处理期间在主线程上运行。