gpt4 book ai didi

ios - 如何使用 collectionview 摆脱保留循环

转载 作者:行者123 更新时间:2023-11-28 12:14:49 24 4
gpt4 key购买 nike

由于我认为是 Collection View 和 View Controller 之间的保留循环,我无法销毁 View Controller 。我尝试使 collectionview 成为一个弱变量,但现在每当我尝试将 collectionview 添加到 viewcontroller 时,我都会得到 nil。如果有其他方法可以尝试,而不是让 collectionview 变弱,我也愿意接受。

weak var table = UICollectionView(frame: CGRect(x: 0, y: 0, width: 0, height: 0), collectionViewLayout: UICollectionViewFlowLayout())
weak var customFlowLayout = UICollectionViewFlowLayout() //default cell spacing is 10





table?.frame = CGRect(x: 0, y: 50, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
table?.isHidden = true
table?.backgroundColor = UIColor.white
table?.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "customCellIdentifier")
table?.dataSource = self
table?.delegate = self
//table.rowHeight = CGFloat(100)
customFlowLayout?.minimumLineSpacing = 5 //default is 10
table?.collectionViewLayout = customFlowLayout!
self.view.addSubview(table!) //this is the line that breaks every time

最佳答案

我没有从您提供的代码中看到任何循环保留。除非有一个 block 被传递到某处,否则很难有一个由标准 UICollectionView 直接引起的保留周期。如果有的话,很可能你的 View Controller 持有 UICollectionView 永远不会被释放。

UICollectionView 的 View Controller 上的属性可能很弱,但您需要将局部变量声明为强引用(不是 weak),如下所示:

class ViewController : UIViewController {
weak var collectionView: UICollectionView?

// Maybe in viewDidLoad()
let cv = UICollectionView(...)
...
self.view.addSubview(cv)
self.collectionView = cv

你的本地声明应该是一个强引用,否则它将被分配并立即释放,因为没有任何东西持有它。一旦 cv 被添加为 subview ,它就会从 view 中获得强引用。您的类的名为 collectionView 的属性现在可以是弱引用,一旦 View 被释放,collectionView 就会被释放。

关于ios - 如何使用 collectionview 摆脱保留循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47083638/

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