我试图打破保留周期但无法做到。我只是找不到保留周期的来源。
class MyViewController: UIViewController {
weak var refreshHeaderView: PZPullToRefreshView?
lazy var tableView: UITableView = {
[unowned self] in //with or without doesn’t make any difference
let tableView = UITableView()
tableView.delegate = self
tableView.dataSource = self
tableView.separatorStyle = .None
tableView.registerClass(CustomViewCell.self, forCellReuseIdentifier: "cell")
return tableView
}()
deinit {
println("Deinit View")
}
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(tableView)
tableView.frame = view.frame
if refreshHeaderView == nil {
println("Adding")
var view = PZPullToRefreshView(frame: CGRectMake(0, 0 - tableView.bounds.size.height / 2, tableView.bounds.size.width, tableView.bounds.size.height / 2 ))
view.delegate = self
self.tableView.addSubview(view)
refreshHeaderView = view
}
…
…
extension MyViewController: UITableViewDelegate, UITableViewDataSource, PZPullToRefreshDelegate {
// Usual tableview methods
}
// Deinit part of PZPullToRefreshView
deinit {
delegate = nil
activityView = nil
statusLabel = nil
arrowImage = nil
lastUpdatedLabel = nil
println("Deinit Refresh")
}
当我从导航控制器推送此视图时,我会在加载视图时看到" Deinit View“。但是我没有从刷新控制器获得“Deinit Refresh”。这意味着它保留。如果我使用下面的代码,我会看到Deinit Refresh。
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated)
if self.navigationController?.visibleViewController == self {
self.refreshHeaderView?.removeFromSuperview()
}
}