我猜这个问题是一个生命周期问题。应用程序收到内存警告并尝试卸载一些用户界面项。但我不是 100% 确定如何在堆栈跟踪上最后报告的项目的上下文中解释错误。
Exception Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0xa0d9f968
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x361dc026 objc_msgSend_stret + 18
1 TheApp 0x000b4d31 -**[TheAppFeedController removeAdView]** (TheAppFeedController.m:**189**)
2 TheApp 0x0000d68d -[TheAppViewController viewDidUnload] (TheAppViewController.m:177)
3 TheApp 0x000b4a63 -[TheAppFeedController viewDidUnload] (TheAppFeedController.m:137)
4 UIKit 0x32e66a37 -[UIViewController unloadViewForced:] + 251
5 UIKit 0x32fae3ad -[UIViewController purgeMemoryForReason:] + 65
所以堆栈跟踪指向这个方法,它为什么会抛出这个错误并没有真正的意义。
-(void) removeAdView {
[super removeAdView];
[self fixLayoutForAdRemoval:self.tableView];
}
当您查找堆栈时,我确实注意到的一件事[super viewDidUnload]
是被称为第一行代码。因此,在完成所有“卸载”工作后,我将其移至底部。无论这是否真的重要,网上似乎都存在一些分歧,一些 SO 答案说超类的viewDidUnload
方法什么都不做,因此在开始或结束时调用它并不重要。
所以我做了那个改变,但是因为我从来没有能够重现这个错误,所以我不确定它是否是实际的修复。想获得更多关于这个问题的意见,看看我的推理是否正确。