Objective c UICollectionView如何设置UICollectionViewLayout的只读属性?

Objective c UICollectionView如何设置UICollectionViewLayout的只读属性?,objective-c,uicollectionview,Objective C,Uicollectionview,在查看UICollectionViewLayout时,我注意到它的属性UICollectionView是只读的 @property (nonatomic, readonly) UICollectionView *collectionView 讨论 向集合视图对象指定新布局对象时,集合视图对象将设置此特性的值 这里提到的集合视图对象是UICollectionView实例 UICollectionView如何在此处设置不同类对象(UICollectionViewLayout)的只读属性 说清楚了,

在查看UICollectionViewLayout时,我注意到它的属性UICollectionView是只读的

@property (nonatomic, readonly) UICollectionView *collectionView
讨论

向集合视图对象指定新布局对象时,集合视图对象将设置此特性的值

这里提到的集合视图对象是UICollectionView实例

UICollectionView如何在此处设置不同类对象(UICollectionViewLayout)的只读属性

说清楚了,

由于此属性是只读的,因此无法执行以下操作:

    UICollectionView *layout =...;
    layout.collectionView = someCollectionView; // compile error here since that property is read-only.
然而,当你

    [someCollectionView setCollectionViewLayout:layout];
    // this also updates layout.collectionView such that, 
    // layout.collectionView == someCollectionView
这基本上意味着,在这个方法中,UICollectionView以某种方式成功地调用了

    layout.collectionView = someCollectionView;
collectionView怎么可能修改了layout对象的只读属性?

如果您查看一下,您可以看到有一个私有的
-(void)\u setCollectionView:(id)arg1
方法用于设置集合视图。所以很明显,苹果有一个setter,他们在内部使用,但你不应该这样做。当您调用
setCollectionViewLayout:
时,Apple会在内部调用该setter方法,并设置实现工作所需的其他属性