UITableView/UIScrollView 当 ViewController deinits 时,委托没有设置为 nil
UITableView/UIScrollView delegate not getting set to nil when ViewController deinits
我正在使用 Swift 1.2
我有一个 UIViewController,它是 UITableView 的委托。当我从 NavigationController 弹出这个 VC 时,UITableView 内的 UIScrollView 试图在它被释放后调用我的 VC 并导致 EXC_BAD_ACCESS 崩溃。
为什么? ARC 不应该解决这个问题吗?
要解决这个问题,我必须写:
deinit {
self.tableView.delegate = nil
}
烦人。我在做傻事吗?
代表被挂在故事板中,这一点也不奇怪。事实上,我想不出我的设置有什么异常。
UITableView 委托声明:
// Swift
unowned(unsafe) var delegate: UITableViewDelegate?
// Obj-C
@property(nonatomic, assign) id< UITableViewDelegate > delegate
添加到 Alex 的正确答案,这显然已在 iOS 9 中修复:
https://twitter.com/zwaldowski/status/627158943035457536
https://twitter.com/steipete/status/608387828221898754
并非所有 Apple 框架都在内部使用 ARC。您看到的可能是 UIScollView
/UITableView
仍在使用手动内存管理的结果。
我正在使用 Swift 1.2
我有一个 UIViewController,它是 UITableView 的委托。当我从 NavigationController 弹出这个 VC 时,UITableView 内的 UIScrollView 试图在它被释放后调用我的 VC 并导致 EXC_BAD_ACCESS 崩溃。
为什么? ARC 不应该解决这个问题吗?
要解决这个问题,我必须写:
deinit {
self.tableView.delegate = nil
}
烦人。我在做傻事吗?
代表被挂在故事板中,这一点也不奇怪。事实上,我想不出我的设置有什么异常。
UITableView 委托声明:
// Swift
unowned(unsafe) var delegate: UITableViewDelegate?
// Obj-C
@property(nonatomic, assign) id< UITableViewDelegate > delegate
添加到 Alex 的正确答案,这显然已在 iOS 9 中修复:
https://twitter.com/zwaldowski/status/627158943035457536 https://twitter.com/steipete/status/608387828221898754
并非所有 Apple 框架都在内部使用 ARC。您看到的可能是 UIScollView
/UITableView
仍在使用手动内存管理的结果。