我有一个UICollectionViewController管理一个集合视图,它为不同的应用程序状态使用不同的布局。我-setCollectionViewLayout:animated:用来在不同的布局之间进行转换。我遇到了一个糟糕的访问错误,这将极大地帮助了解集合视图的当前布局实际拥有什么(例如保留对)的引用。strong
调用后-setCollectionViewLayout:animated:,我注意到以下内容(在哪里self)UICollectionViewController:
self.collectionView.collectionViewLayout返回新布局。self.collectionViewLayout仍然返回旧布局。
这使我检查了UICollectionView 类参考,它解释了这种行为:
集合视图布局
用于初始化集合视图控制器的布局对象。(只读)
@property (nonatomic,readonly) UICollectionViewLayout *collectionViewLayout讨论
此属性包含您传递给 initWithCollectionViewLayout: 方法的布局对象。此属性中的布局对象不会更新以反映对集合视图本身的更改。您可以使用此属性来引用您最初配置要使用的集合视图的布局对象。
好的。self.collectionViewLayout对初始布局的弱引用(或者是?)也是self.collectionView.collectionViewLayout对当前布局的强引用。
为了确认这一点,我深入调试器,但无法找到实际UICollectionView应该由UICollectionViewController. 相反,集合视图控制器的_view变量是UICollectionViewControllerWrapperView. 哇?
整个经历给我留下了以下问题:
- 实际
UICollectionView存储在哪里UICollectionViewController? - 是否
self.collectionViewLayout保留strong对初始布局的引用?