我知道我的问题很简单,我知道有关该主题的很多问题,但我找不到任何解决方案。
我有简单的表格视图,只有 100 行的标签。当我滚动时,每次使用 Xcode 中的仪器工具滚动时,内存都会增加,尽管我使用出列单元格作为苹果文档,但我的问题是为什么每次滚动时单元格不从内存中释放(从内存中释放),它正在创建新的单元格。
以下是我的代码:
import UIKit
class ViewController: UIViewController ,UITableViewDataSource,UITableViewDelegate{
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 100
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = "Table View Cell! "
return cell
}
}
您可以查看仪器工具,每次滚动都可以看到内存在增加。
请问,当我滚动时如何从内存中释放单元格?
非常感谢。
您只需从视图控制器的表视图单元格中释放内存
单击“返回”时
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if self.isMovingFromParent {
AllProductList.removeAll()
self.view = nil
}
}
deinit {
print("deinit called")
}
View Controller 通过私有属性
_externalObjectsTableForViewLoading
对自身的引用表示强引用循环。此行为是由使用 Storyboard 引起的。
在下面的代码中,创建了一个带有 UIStackView 的控制器,其中添加了一个 UIView,并以控制器本身作为委托(强引用)。
class RootViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let storyboard = UIStoryboard(name: "MyStoryboard", bundle: .main)
let viewController = storyboard.instantiateViewController(identifier: "MyViewController")
self.present(viewController, animated: true, completion: nil)
}
}
protocol MySubviewDelegate {}
class MySubview: UIView {
let delegate: MySubviewDelegate
init(delegate: MySubviewDelegate) {
self.delegate = delegate
super.init(frame: .zero)
}
}
class MyViewController: UIViewController, MySubviewDelegate {
@IBOutlet weak var stackView: UIStackView!
override func viewDidLoad() {
super.viewDidLoad()
let subview = MySubview(delegate: self)
stackView.addArrangedSubview(subview)
}
}