Autorotation crash in iOS

僤鯓⒐⒋嵵緔 提交于 2019-12-11 03:43:47

问题


I am getting abnormal termination (crash) with the App which I am working with when I am changing the device orientation. I am unable to reproduce it so often (it's not happening always when I am rotating, let's say the chance would be some where around 0.01%), but it's a serious problem. I am attaching an important part of a crash report.

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x6563616e
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x3233a5b0 objc_msgSend + 16
1   UIKit                           0x36297b82 -[UISectionRowData     refreshWithSection:tableView:tableViewRowData:] + 1546
2   UIKit                           0x3628301e -[UITableViewRowData     rectForFooterInSection:] + 310
3   UIKit                           0x3628358c -[UITableViewRowData heightForTable] + 48
4   UIKit                           0x36283400 -[UITableView(_UITableViewPrivate)         _updateContentSize] + 324
5   UIKit                           0x362cc8b4 -[UITableView _rectChangedWithNewSize:oldSize:] + 252
6   UIKit                           0x362cc544 -[UITableView setFrame:] + 220
7   UIKit                           0x362c59c4 -[UIView(Geometry) _applyAutoresizingMaskWithOldSuperviewSize:] + 644
8   UIKit                           0x362c572e -[UIView(Geometry) _resizeWithOldSuperviewSize:] + 262
9   UIKit                           0x3644eb2a -[UIScrollView _resizeWithOldSuperviewSize:] + 38
10  CoreFoundation                  0x35b63aec __NSArrayChunkIterate + 360
11  CoreFoundation                  0x35b5ca74 __NSArrayEnumerate + 608
12  CoreFoundation                  0x35abeb66 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 58
13  UIKit                           0x3627e09e -[UIView(Geometry) resizeSubviewsWithOldSize:] + 114
14  UIKit                           0x36263ba2 -[UIView(Geometry) setFrame:] + 414
15  UIKit                           0x362c59c4 -[UIView(Geometry) _applyAutoresizingMaskWithOldSuperviewSize:] + 644
16  UIKit                           0x362c572e -[UIView(Geometry) _resizeWithOldSuperviewSize:] + 262
17  CoreFoundation                  0x35b63aec __NSArrayChunkIterate + 360
18  CoreFoundation                  0x35b5ca74 __NSArrayEnumerate + 608
19  CoreFoundation                  0x35abeb66 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 58
20  UIKit                           0x3627e09e -[UIView(Geometry) resizeSubviewsWithOldSize:] + 114
21  UIKit                           0x36263ba2 -[UIView(Geometry) setFrame:] + 414
22  UIKit                           0x362a6dc0 -[UIViewControllerWrapperView setFrame:] +     48
23  UIKit                           0x362c59c4 -[UIView(Geometry) _applyAutoresizingMaskWithOldSuperviewSize:] + 644
24  UIKit                           0x362c572e -[UIView(Geometry) _resizeWithOldSuperviewSize:] + 262
25  CoreFoundation                  0x35b63aec __NSArrayChunkIterate + 360
26  CoreFoundation                  0x35b5ca74 __NSArrayEnumerate + 608
27  CoreFoundation                  0x35abeb66 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 58
28  UIKit                           0x3627e09e -[UIView(Geometry) resizeSubviewsWithOldSize:] + 114
29  UIKit                           0x36263ba2 -[UIView(Geometry) setFrame:] + 414
30  UIKit                           0x362c59c4 -[UIView(Geometry) _applyAutoresizingMaskWithOldSuperviewSize:] + 644
31  UIKit                           0x362c572e -[UIView(Geometry) _resizeWithOldSuperviewSize:] + 262
32  CoreFoundation                  0x35b63aec __NSArrayChunkIterate + 360
33  CoreFoundation                  0x35b5ca74 __NSArrayEnumerate + 608
34  CoreFoundation                  0x35abeb66 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 58
35  UIKit                           0x3627e09e -[UIView(Geometry) resizeSubviewsWithOldSize:] + 114
36  UIKit                           0x362c64ae -[UIView(Geometry) setBounds:] + 430
37  UIKit                           0x3634ff32 -[UILayoutContainerView setBounds:] + 58
38  UIKit                           0x363edd88 -[UIViewController window:willAnimateRotationToInterfaceOrientation:duration:] + 460
39  UIKit                           0x3630e2b0 -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:isRotating:] + 3616
40  UIKit                           0x3630d482 -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:] + 42
41  UIKit                           0x3630d40c -[UIWindow _setRotatableViewOrientation:duration:force:] + 64
42  UIKit                           0x3644317c __57-[UIWindow _updateToInterfaceOrientation:duration:force:]_block_invoke_0 + 100
43  UIKit                           0x362cb676 -[UIWindow _updateToInterfaceOrientation:duration:force:] + 214
44  UIKit                           0x362d4d20 -[UIWindow _updateInterfaceOrientationFromDeviceOrientation:] + 176
45  CoreFoundation                  0x35ab9034 _CFXNotificationPost + 1424
46  Foundation                      0x3721bd8c -[NSNotificationCenter postNotificationName:object:userInfo:] + 68
47  UIKit                           0x36268c60 -[UIDevice setOrientation:animated:] + 292
48  UIKit                           0x362633d6 -[UIApplication handleEvent:withNewEvent:] + 2954
49  UIKit                           0x362626c8 -[UIApplication sendEvent:] + 68
50  UIKit                           0x36262116 _UIApplicationHandleEvent + 6150
51  GraphicsServices                0x318885a0 _PurpleEventCallback + 588
52  GraphicsServices                0x318881ce PurpleEventCallback + 30
53  CoreFoundation                  0x35b3d170 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
54  CoreFoundation                  0x35b3d112 __CFRunLoopDoSource1 + 134
55  CoreFoundation                  0x35b3bf94 __CFRunLoopRun + 1380
56  CoreFoundation                  0x35aaeeb8 CFRunLoopRunSpecific + 352
57  CoreFoundation                  0x35aaed44 CFRunLoopRunInMode + 100
58  GraphicsServices                0x318872e6 GSEventRunModal + 70
59  UIKit                           0x362b62f4 UIApplicationMain + 1116

Neither thread activities are involved nor ViewControllers are customized. Moreover, I am using ARC.

I would like to know either the exact cause of reason or the possibilities which would lead to a crash while autorotation is taking place.

Thanks in advance...


回答1:


I think app sends a message to an deallocated object. Yes, sometimes it happens even if when you use ARC. To debug it you need to run your app with Instruments (Zombies) and try to reproduce the bug.




回答2:


Enabling Zombies and debugging the App with Instruments (Zombies) has really helped to locate the error. But to fix the bug or avoid the same mistake in the future is really important.

In my code, I had an implementation something like this...

- (void)someMethod {

    [self.navigationController pushViewController:[DestinationViewController new] animated:YES];

}

there we are not holding the DestinationViewController's strong reference directly. But the change...

@property (strong, nonatomic) DestinationViewController *dvc;

// ....

- (void)someMethod {

    self.dvc = [DestinationViewController new];        

    [self.navigationController pushViewController:self.dvc animated:YES];

}

has helped to avoid the bug. I can't really explane why...??? but I hope changing the device orientation releses DestinationViewController but which can be avoided by holding the strong reference.



来源:https://stackoverflow.com/questions/16482650/autorotation-crash-in-ios

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!