2017-11-02 1 views
0

collectionview와 viewcontroller 사이의주기 유지로 인해 viewcontroller를 파괴하는 데 문제가 있습니다. 나는 collectionview를 약한 변수로 만들려고했지만 viewcontroller에 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

컬렉션 뷰가 문제가 아니어야합니다. 문제는보기 컨트롤러에 직접 참조를 누른 다음보기 컨트롤러를 deinited 수 없습니다. 네가 어딘가에서 그걸 할거야. – Luzo

답변

2

제공 한 코드의 보존주기가 표시되지 않습니다. 블록이 어딘가에 전달되지 않으면 표준 UICollectionView에 의해 직접적으로 유지주기가 발생하는 것이 매우 어렵습니다. 무엇이든간에 UICollectionView에 붙어있는보기 컨트롤러가 절대로 출시되지 않을 가능성이 있습니다.

UICollectionView에 대한 뷰 컨트롤러의 속성은 약이 될 수 있지만, 그렇게 같은 강한 참조 (NO 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은보기가 할당 해제되면 해제됩니다.

관련 문제