保留循环TableView

时间:2015-06-03 08:11:37

标签: ios uitableview swift automatic-ref-counting

我试图打破保留周期但无法做到。我只是找不到保留周期的来源。

 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()
    }
}

0 个答案:

没有答案