2017-11-02 2 views
0

collectionviewとviewcontrollerの間のサイクルを保持すると考えられるため、ViewControllerを破壊するのに問題があります。私はcollectionviewを弱い変数にしようとしましたが、viewviewrollerにcollectionviewを追加しようとするたびにゼロになっています。コレクションビューを弱くするのではなく、別のルートがあれば、私はそれにもオープンしています。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 
+0

どのようにViewControllerを破棄しようとしていますか? – atreat

+0

コレクションビューは問題ではありません。問題は、ビューコントローラへのダイレクトリファレンスを保持しているときに、ビューコントローラを指定できないことです。私はあなたがどこかでそれをすると確信しています。 – Luzo

答えて

2

提供したコードからの保持期間はありません。ブロックがどこかに渡されない限り、保持サイクルが標準UICollectionViewによって直接引き起こされるのはかなり困難です。何かがある場合、UICollectionViewに保持されているビューコントローラが決して解放されない可能性があります。

UICollectionViewのためのあなたのビューコントローラのプロパティが弱いことができ

ができますが、そのような強い参照(なしweak)としてローカル変数を宣言する必要があります:あなたのローカル宣言は強くなければならない

class ViewController : UIViewController { 
    weak var collectionView: UICollectionView? 

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

それ以外の場合は、何も保持していないため、割り当てられてすぐに解放されます。 cvがサブビューとして追加されると、viewからの強い参照があります。 collectionViewというクラスのプロパティは弱い参照になり、ビューが割り当て解除されるとcollectionViewが解放されます。

関連する問題