gpt4 book ai didi

iphone - 为什么在对象不是 nil 的情况下我会得到 exc bad access?

转载 作者:行者123 更新时间:2023-12-03 16:18:08 25 4
gpt4 key购买 nike

我有一个接收远程通知的应用程序。推送后显示的我的 View Controller 有一个表格 View 。应用程序在行设置框架处非常随机地崩溃(20 次尝试中的 1 次):

if (!myTableView) {
NSLog(@"self.myTableView is nil");
}
myTableView.frame=CGRectMake(0, 70, 320, 376);

这只发生在我打开应用程序,然后打开其他一些应用程序,然后收到推送通知时。我想这与内存有关。我使用ARC(ios 5)。奇怪的是nslog没有显示,所以tableview不是nil。

崩溃日志:
Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x522d580c
Crashed Thread: 0

Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libobjc.A.dylib 0x352b1f7e objc_msgSend + 22
1 Foundation 0x37dc174c NSKVOPendingNotificationCreate + 216
2 Foundation 0x37dc1652 NSKeyValuePushPendingNotificationPerThread + 62
3 Foundation 0x37db3744 NSKeyValueWillChange + 408
4 Foundation 0x37d8a848 -[NSObject(NSKeyValueObserverNotification) willChangeValueForKey:] + 176
5 Foundation 0x37e0ca14 _NSSetPointValueAndNotify + 76
6 UIKit 0x312af25a -[UIScrollView(Static) _adjustContentOffsetIfNecessary] + 1890
7 UIKit 0x312cca54 -[UIScrollView setFrame:] + 548
8 UIKit 0x312cc802 -[UITableView setFrame:] + 182
9 POViO 0x000913cc -[FeedVC viewWillAppear:] (FeedVC.m:303)

Dealloc 没有被调用,因为它没有被记录:
- (void)dealloc {

NSLog(@"dealloc");

}

最佳答案

你有内存问题。您的 tableView 的保留计数为零;因此,尽管指向 tableView 的指针仍然存在,但系统已将对象丢弃在该实际地址,因此 EXC_BAD_ACCESS。

显示 tableView 的 UI 可能被隐藏并因此被卸载,但你留下了一些逻辑,假设 table view 在它不存在时仍然存在。

如果不了解更多项目,很难调试正在发生的事情。最好的办法是仔细查看应用程序和 UI 流程的设计。什么会导致 UI 被释放?您如何输入假设 UI 的一部分仍然存在的代码?

注:向 nil 引用发送消息不会产生任何错误;这是语言设计的。

关于iphone - 为什么在对象不是 nil 的情况下我会得到 exc bad access?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12315062/

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