UICollectionView和它的collectionViewLayout之间是否有保留周期?

时间:2016-08-17 23:07:55

标签: ios objective-c

根据UICollectionView和UICollectionViewLayout的类引用,UICollectionView拥有对其collectionViewLayout属性的强引用,而UICollectionViewLayout也拥有对其collectionView属性的强引用。

在UICollectionView中,

@property(nonatomic, strong) UICollectionViewLayout *collectionViewLayout

在UICollectionViewLayout中,(strong是默认属性属性)。

@property(nonatomic, readonly) UICollectionView *collectionView   

这里看起来像一个保留周期。为什么UICollectionViewLayout不包含对collectionView的弱引用?

2 个答案:

答案 0 :(得分:1)

正如Does Objective-C readonly property need to specify retain or copy?的回答所述,strongweak不适用于只读属性 - 至少不适用于该属性的公开声明。< / p>

只读属性的实际意义在于它是如何实际实现的。该属性很可能在私有类扩展中重新声明为:

@property (nonatomic, weak, readwrite) UICollectionView *collectionView;

这将避免集合视图与其布局之间的保留周期。

答案 1 :(得分:1)

  

在UICollectionViewLayout中,(strong是默认属性属性)。

@property(nonatomic, readonly) UICollectionView *collectionView

这是默认值,但readonly属性没有存储空间,它只是一个getter。在内部,布局必须具有对集合视图的弱引用。我不知道它的实际源代码,但它看起来像这样:

@interface UICollectionViewLayout ()
@property(nonatomic, weak, readwrite) UICollectionView *collectionView;
@end

但如果您运行仪器并且实际发现泄漏,您应该提交雷达,因为它绝对是我书中的错误。