gpt4 book ai didi

iphone - UITableView 在动画过程中崩溃,已找到解决方案,但没有找到根本原因,想知道为什么?

转载 作者:行者123 更新时间:2023-12-03 19:15:39 25 4
gpt4 key购买 nike

在我的iphone项目中,我总是将UITableView作为IBOutlet插入到 View Controller 中,大多数时候它运行良好,但是当popToRootViewControllerAnimated调用动画时会发生随机崩溃。通过僵尸跟踪,发现崩溃是由于UITableView实例已经被释放,但仍然有系统事件发送给它,所以崩溃。

我总是通过 View Controller 的 dealloc 方法中的以下方法之一来解决此类问题。

tableView.dataSource = nil;   (work for most cases)
or
[tableView removeFromSuperview]; (work for some special cases)

虽然可以通过上述更改修复崩溃,但我仍然感到困惑。

  1. 我们需要将其 dataSource 显式设置为 nil 以避免崩溃,这是苹果的缺陷吗?或者我们自己的应用程序代码有问题?
  2. 有谁也经历过这样的崩溃,你知道根本原因是什么吗?

任何想法或讨论将不胜感激,提前致谢。

enter code here
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x626f6d37
Crashed Thread: 0

Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libobjc.A.dylib 0x33fe0c98 objc_msgSend + 16
1 UIKit 0x364538f6 -[UITableView(UITableViewInternal) _spacingForExtraSeparators] + 58
2 UIKit 0x3645337a -[UITableView(_UITableViewPrivate) _adjustExtraSeparators] + 158
3 UIKit 0x36453218 -[UITableView layoutSubviews] + 40
4 UIKit 0x363ff5f4 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 20
5 CoreFoundation 0x30e13efc -[NSObject(NSObject) performSelector:withObject:] + 16
6 QuartzCore 0x33d8dbae -[CALayer layoutSublayers] + 114
7 QuartzCore 0x33d8d966 CALayerLayoutIfNeeded + 178
8 QuartzCore 0x33d931be CA::Context::commit_transaction(CA::Transaction*) + 206
9 QuartzCore 0x33d92fd0 CA::Transaction::commit() + 184
10 QuartzCore 0x33d8c04e CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 50
11 CoreFoundation 0x30e7da2e __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 10
12 CoreFoundation 0x30e7f45e __CFRunLoopDoObservers + 406
13 CoreFoundation 0x30e80754 __CFRunLoopRun + 848
14 CoreFoundation 0x30e10ebc CFRunLoopRunSpecific + 224
15 CoreFoundation 0x30e10dc4 CFRunLoopRunInMode + 52
16 GraphicsServices 0x34efe418 GSEventRunModal + 108
17 GraphicsServices 0x34efe4c4 GSEventRun + 56
18 UIKit 0x36428d62 -[UIApplication _run] + 398
19 UIKit 0x36426800 UIApplicationMain + 664
20 ScoutFree 0x00099558 0x1000 + 623960
21 ScoutFree 0x00003618 0x1000 + 9752

最佳答案

你忘记将 tableView.delegate 设置为 nil,所以你仍然可能会崩溃,特别是当动画正在进行时(因为它现在要求死 Controller 提供新行)。这不是苹果的缺陷,程序员有责任清除这些引用。因此将tableView的dataSource和delegate属性设置为nil,然后释放tableview(通过将相应属性设置为nil或像这样释放iVar [_iVar release]; iVar = nil;)

关于iphone - UITableView 在动画过程中崩溃,已找到解决方案,但没有找到根本原因,想知道为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9963677/

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