gpt4 book ai didi

objective-c - 翻译 iOS 堆栈跟踪 - viewDidUnload 上的 SIGSEGV/SEGV_ACCERR

转载 作者:行者123 更新时间:2023-11-29 04:20:21 27 4
gpt4 key购买 nike

我猜测这个问题是生命周期问题。该应用程序收到内存警告并尝试卸载一些用户界面项目。但我不是 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] 被作为第一行代码调用。因此,在完成所有“卸载”工作后,我将其移至底部。网上似乎存在一些分歧,这是否真的重要,some SO answers假设父类(super class)的 viewDidUnload 方法不执行任何操作,因此在开头或结尾调用它并不重要。

所以我已经做出了更改,但由于我从未能够重现此错误,所以我不确定这是否是真正的修复。想获得更多关于这个问题的意见,看看我的推理是否正确。

最佳答案

[super removeAdView];
[self fixLayoutForAdRemoval:self.tableView];

如果removeAdView正在拆除自身的一部分;如果它导致 self 被释放到释放点,那么后续对 fixLayoutForAdRemoval: 的调用很容易失败。

在 Instruments 中打开僵尸检测并查看它检测到的内容。

关于objective-c - 翻译 iOS 堆栈跟踪 - viewDidUnload 上的 SIGSEGV/SEGV_ACCERR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13052724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com