gpt4 book ai didi

ios - UICollectionViewController 的布局所有权(self.collectionView.collectionViewLayout 与 self.collectionViewLayout)

转载 作者:可可西里 更新时间:2023-11-01 03:57:05 24 4
gpt4 key购买 nike

我有一个 UICollectionViewController 管理一个 Collection View ,该 Collection View 针对不同的应用程序状态使用不同的布局。我正在使用 -setCollectionViewLayout:animated: 在不同布局之间进行转换。我遇到了错误的访问错误,如果知道 Collection View 的当前布局实际拥有(例如,保留对 strong 的引用),这将非常有帮助。

调用 -setCollectionViewLayout:animated: 后,我注意到以下内容(其中 selfUICollectionViewController):

  • self.collectionView.collectionViewLayout 返回新布局。
  • self.collectionViewLayout 仍然返回旧布局。

这让我检查了 UICollectionView Class Reference ,这解释了这种行为:

collectionViewLayout

The layout object used to initialize the collection view controller. (read-only)

@property (nonatomic,readonly) UICollectionViewLayout *collectionViewLayout

Discussion
This property contains the layout object you passed to the initWithCollectionViewLayout: method. The layout object in this property is not updated to reflect changes to the collection view itself. You can use this property to refer to the layout object you originally configured the collection view to use.

好的。所以 self.collectionViewLayout 是对初始布局的弱引用(或者是?),而 self.collectionView.collectionViewLayout 是对当前布局的强引用。

为了确认这一点,我深入研究了调试器,但无法找到据称由 UICollectionViewController 拥有的实际 UICollectionView>。相反, Collection View Controller 的 _view 变量是 UICollectionViewControllerWrapperView 的一个实例。 什么?

整个经历给我留下了以下问题:

  1. 存储在 UICollectionViewController 中的实际 UICollectionView 在哪里?
  2. self.collectionViewLayout 是否保留对初始布局的 strong 引用?

最佳答案

好吧,我已经回答了我的第一个问题:UICollectionViewControllerWrapperView 有一个名为 _subviewCache 的 ivar,它是一个可变数组,包含实际的 UICollectionView 在索引 0 处。很奇怪。

但是,我仍然希望回答我的第二个问题。在我看来, Collection View Controller 没有保持对初始布局的强引用,因为它的 collectionViewLayout(初始布局)属性是只读的,在调试器的变量 View 中检查 Collection View Controller 时,我找不到任何对 Collection View 布局的引用。然而,如果是这种情况,即使在 Collection View 对初始布局的强引用已被对不同布局的强引用替换之后,它如何保持初始布局


更新:事实证明,我看到的访问错误崩溃实际上是由与 UIDynamicAnimator 布局的所有权。这几乎肯定是 Apple 代码中的错误,我已经提交了一个雷达,您可以在此处阅读(欢迎重复!):

http://www.openradar.me/15062440

也就是说,从技术上讲,这些都不能解决我的第二个问题。它不再与我或我的工作相关,但我仍然欢迎并赞成任何真正的答案,即使它们此时纯粹是学术性的。

关于ios - UICollectionViewController 的布局所有权(self.collectionView.collectionViewLayout 与 self.collectionViewLayout),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com