1

Я использую Swift 1.2UITableView/UIScrollView делегат не получает установлен в ноль, когда ViewController deinits

У меня есть UIViewController, который является делегатом в UITableView. Когда я выхожу из этого VC с помощью NavigationController, UIScrollView внутри UITableView пытается вызвать мой 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 




Чтобы добавить правильный ответ Алекса, это фиксируется в прошивке 9 очевидно:

https://twitter.com/zwaldowski/status/627158943035457536 https://twitter.com/steipete/status/608387828221898754

+0

Дайте некоторый контекст - полную функцию и точную строку, в которой происходит сбой. Где/Почему UITableView чувствует, что у него все еще есть событие для обработки? – BaseZen

ответ

4

Не все каркасы Apple используют ARC внутренне. То, что вы смотрите, вероятно, является результатом UIScollView/UITableView, все еще использующего ручное управление памятью.

+1

Хмммм. Я ошеломлен тем, что я никогда не сталкивался с этой проблемой. Я обновил свой вопрос, что говорят документы. Не присваивается в значительной степени то же самое, что и слабый? Не поддерживает ли счет удержания? – kylejm

+0

Разница между 'assign' и' weak' является тонкой. Указатели с семантикой 'слабая' сохраняются в Objective-C/Swift. Это означает, что когда ссылочный объект освобождается, указатель изменяется на 0. С другой стороны, 'assign' /' unowned (unsafe) 'не обнуляется. Это означает, что указатель имеет то же значение, что и раньше, но объект, который он ссылается, был освобожден. –

+0

Если вы запустите свое приложение в Инструментах с помощью датчика Zombies, это действительно подчеркнуто довольно красиво. –

Смежные вопросы