gpt4 book ai didi

ios - 未调用 TableView deinit

转载 作者:行者123 更新时间:2023-12-01 18:38:15 25 4
gpt4 key购买 nike

我有一个正常的table view在一个全新的项目中,没有额外的代码。在我的 Storyboard中,我有 2 个 View Controller 和一个 navigation controller嵌入到 First Controller .在 First Controller我有一个带有按钮和标签的表格 View 。我给了segue来自 cell Storyboard中第二个 Controller 的按钮。

我想知道的是当我的deinit将首先调用 controller ,它没有被调用。我设置了断点,但似乎没有任何效果。

当我seguesecond 返回至first它适用于 second controller , 因为 controllerpopped .但是我们需要做些什么来运行 deinit在第一个 Controller 中?我需要pop第一个 controller以及来自 stack ?或者我需要明确指定nil别的地方 ?

请帮我理解背后的正确概念?请指导我正确的方向。

代码-:

import UIKit

class ViewController: UIViewController {

// CELL DATA ARRAY

var data = [0,0,0,0,0,0,0,0,0,0]

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// INITIALIZE total tap ARRAY WITH INDEX 0
}

deinit {
print("Deleted")
}
}

// TABLE VIEW METHODS

extension ViewController:UITableViewDelegate,UITableViewDataSource{

// NUMBER OF ROWS
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
// number of sections
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}

// Cell for row

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// deque cell
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomCell
cell.customLabel.text = "Total taps : \(String(data[indexPath.row]))"
// CALL BACK BUTTON
return cell
}

}

自定义单元格-:
import UIKit

class CustomCell: UITableViewCell {

// Outlets

@IBOutlet weak var customCount: UIButton!
@IBOutlet weak var customLabel: UILabel!

override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}

// Cell button action

@IBAction func countTaps(_ sender: UIButton) {

}

override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)

// Configure the view for the selected state
}

}

第二 Controller -:
import UIKit

class SecondViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}


deinit {
print("denit")
}
}

最佳答案

当您使用 push/present View Controller 时,第一个 View Controller 不会被释放,您不会看到 deinit叫。 View Controller 所需的内存量可以忽略不计,但是将其以与您离开它相同的状态存在于内存中的好处是显着的(例如,在您的示例中,如果您关闭第二个 View Controller 以返回 TableView Controller ,它确保它仍然滚动到与之前完全相同的位置)。

事实上,系统维护了所有已呈现但尚未弹出/关闭的 View Controller 的层次结构。见 View Controller Hierarchy .

关于ios - 未调用 TableView deinit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47740470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com