在辅助线程上使用UI更新时,应用程序很少崩溃

时间:2013-05-23 13:00:52

标签: iphone ios ipad

对我来说这真的很奇怪,因为我的应用程序在调试模式下工作正常。当测试人员尝试发布版本 RARELY 时会发生崩溃。我从控制台日志中了解到的内容崩溃日志是某个UI尝试从辅助线程更新但不总是。

在崩溃点我的控制台日志说,

MyApp[715] <Warning>: CoreAnimation: warning, deleted thread with uncommitted CATransaction; set CA_DEBUG_TRANSACTIONS=1 in environment to log backtraces.May 21 10:51:25 
MyApp[715] <Warning>: bool _WebTryThreadLock(bool), 0x1e1dd280: Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...May 21 10:51:25 
MyApp[715] <Notice>: 1   0x38b048f7 WebThreadLock

&安培;设备崩溃日志崩溃线程描述&amp;错误类型如下

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xbbadbeef 
Crashed Thread:  15 
.
.
.
Thread 15 Crashed: 0  
WebCore                         0x38b03944_WebTryThreadLock(bool) + 164 1  
WebCore                         0x38b048f2 WebThreadLock + 62 2  
UIKit                           0x374424f6 -[UIWebTiledView layoutSubviews] + 38 3   
UIKit                           0x374424c6 -[UIWebDocumentView layoutSubviews] + 106 4  
UIKit                           0x373bb7fe -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 254 5 
QuartzCore                      0x30e92d5e -[CALayer layoutSublayers] + 210 6  
QuartzCore                      0x30e928fc CA::Layer::layout_if_needed(CA::Transaction*) + 456 7 
QuartzCore                      0x30e93830 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 12 8  
QuartzCore                      0x30e93216 CA::Context::commit_transaction(CA::Transaction*) + 234 9   
QuartzCore                      0x30e93024 CA::Transaction::commit() + 312 10 
QuartzCore                      0x30ed9df6 CA::Transaction::release_thread(void*) + 166 11  libsystem_c.dylib               0x31150128 _pthread_tsd_cleanup + 172 12  
libsystem_c.dylib               0x3114fdfe _pthread_exit + 114 13 
libsystem_c.dylib               0x31169160 pthread_exit + 24 14 
Foundation                      0x358bf226 +[NSThread exit] + 6 15 
Foundation                      0x35936696 __NSThread__main__ + 998 16 
libsystem_c.dylib               0x3115d30e _pthread_start + 306 17 
libsystem_c.dylib               0x3115d1d4 thread_start + 4 

Thread 15 crashed with ARM Thread State (32-bit):     r0: 0xbbadbeef    r1: 0x00000000      r2: 0x030ba404      r3: 0x00000001     r4: 0x1e1dd280    r5: 0x3b4cacc0      r6: 0x00000000      r7: 0x030baa74     r8: 0x00000028    r9: 0x00006200     r10: 0x00000000     r11: 0x030bbc70     ip: 0x3b4061e0    sp: 0x030baa6c      lr: 0x38b0393b      pc: 0x38b03944   cpsr: 0x60000030

我不太确定这个修复,因为我还没有在我的最后再现它。如果有人至少可以帮助我复制那么这将是很好的帮助:)

2 个答案:

答案 0 :(得分:1)

你在后台线程中进行GUI更改但是根据apple,你在后台线程中没有更改GUI ...所以使用performSelectorOnMainThread进行GUI更改

答案 1 :(得分:1)

This may be a result of calling to UIKit from a secondary thread.

更新主线程上的用户界面。在单独UI原因中执行thread更新的任何情况都将无效。一个选项是Grand Central Dispatch,因为它在后台线程中执行操作并且根本没有崩溃。