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 仍在使用手动内存管理的结果。