为什么numberOfRowsInSection只被一次调用多次?

时间:2016-03-25 17:29:21

标签: ios arrays swift uitableview tableview

// Variable and ViewDidLoad

var auxRow = 0
var auxSection = 0   

override func viewDidLoad() {
    super.viewDidLoad()
}

//章节数,只有一个部分

 override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        auxSection += 1
        print("times section: ", auxSection)
        return 1
    }

//行数

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    auxRow += 1
    print("times row: ", auxRow)
    return 2
}

// TableView配置单元格

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let textCellIdentifier = "cellText"
    let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath)
    let variable : String = indexPath.row.description
    cell.textLabel?.text = variable
    return cell

}

输出:

    times section:  1
    times row:  1
    times section:  2
    times row:  2
    times section:  3
    times row:  3
    times section:  4
    times row:  4

方法numberOfRowsInSection被调用4次。为什么会这样?

2 个答案:

答案 0 :(得分:5)

Apple不保证UIKit可以多长时间调用您的一个委托方法。他们拥有框架。我们可以期望它们缓存该值,但没有任何要求他们这样做。

答案 1 :(得分:2)

您可以在window.slice方法中设置断点,以查看内部使用的断点。没有理由不应该多次调用它,因为只要tableview内部需要知道它有多少行就会调用它。它被称为4次,因为Apple的tableview代码需要在4个不同的时间知道你的一个部分中有多少行。