在iOS中奇怪的SIGSEGV崩溃

时间:2015-07-17 03:51:02

标签: ios objective-c uitableview uiscrollview crash

大约有10多起崩溃报告。

姓名:SIGSEGV 原因:SEGV_MAPERR

似乎这是一个UIScrollView / UITableView动画或滚动问题。 我怎样才能找到根本原因?

堆栈:

0   
libobjc.A.dylib 0x0000000195fafbd0 objc_msgSend + 12
1   
UIKit 0x00000001892b1db8 -[UIScrollView(UIScrollViewInternal) _delegateScrollViewAnimationEnded] + 64
2   
UIKit 0x00000001892b1d30 -[UIScrollView(UIScrollViewInternal) _scrollViewAnimationEnded:finished:] + 204
3   
UIKit 0x0000000189366814 -[UIAnimator stopAnimation:] + 500
4   
UIKit 0x0000000189366248 -[UIAnimator(Static) _advanceAnimationsOfType:withTimestamp:] + 332
5   
QuartzCore 0x0000000188b4629c CA::Display::DisplayLinkItem::dispatch() + 28
6   
QuartzCore 0x0000000188b46134 CA::Display::DisplayLink::dispatch_items() + 320
7   
IOKit 0x0000000185921470 IODispatchCalloutFromCFMessage + 372
8   
CoreFoundation 0x0000000184712dc4 __CFMachPortPerform + 176
9   
CoreFoundation 0x0000000184727a54 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
10  
CoreFoundation 0x00000001847279b4 __CFRunLoopDoSource1 + 432
11  
CoreFoundation 0x0000000184725934 __CFRunLoopRun + 1636
12  
CoreFoundation 0x00000001846512d4 CFRunLoopRunSpecific + 392
13  
GraphicsServices 0x000000018de676fc GSEventRunModal + 164
14  
UIKit 0x0000000189216fac UIApplicationMain + 1484
15  
MyApp 0x000000010001d280 main (main.m:14)
16  
libdyld.dylib 0x000000019661aa08 start + 0

1 个答案:

答案 0 :(得分:0)

我发现在动画期间取消分配控制器和/或其表时会发生这种情况。操作系统在完成动画时仍会触发委托方法(例如-scrollViewDidEndScrollingAnimation:-scrollViewDidEndDecelerating:),但由于对象不再存在,所以事情变得奇怪。

最好的解决方法是在控制器的dealloc方法中取消委托。