我有一个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
对初始布局的引用?