我有一個UICollectionViewController
管理使用不同的佈局不同的應用程序狀態的集合視圖。我正在使用-setCollectionViewLayout:animated:
在不同的佈局之間切換。我遇到訪問錯誤的情況,並且極大地幫助我們知道擁有(例如,保留strong
引用)實際的佈局。UICollectionViewController的佈局所有權(self.collectionView.collectionViewLayout與self.collectionViewLayout)
調用-setCollectionViewLayout:animated:
後,我注意到以下(其中self
是UICollectionViewController
):
self.collectionView.collectionViewLayout
返回新的佈局。self.collectionViewLayout
仍然返回舊的佈局。
這使我檢查UICollectionView Class Reference,這也解釋了這種行爲:用於初始化集合視圖控制器
collectionViewLayout
的佈局對象。 (只讀)
@property (nonatomic,readonly) UICollectionViewLayout *collectionViewLayout
討論
此屬性包含您傳遞給initWithCollectionViewLayout佈局對象:方法。此屬性中的佈局對象未更新以反映集合視圖本身的更改。您可以使用此屬性來引用最初配置要使用的集合視圖的佈局對象。
好的。所以self.collectionViewLayout
是一個弱引用(或是否?)到初始佈局,self.collectionView.collectionViewLayout
是對當前佈局的強烈參考。
爲了證實這一點,我參加了一個潛水進入調試器,但無法找到實際UICollectionView
由UICollectionViewController
理應擁有。相反,收集視圖控制器的_view
變量是UICollectionViewControllerWrapperView
的一個實例。 Whaaaat?
這整個的經歷給我留下了以下問題:
- 當存儲在
UICollectionViewController
實際UICollectionView
? - 是否
self.collectionViewLayout
保持strong
參考最初的佈局?