我对在iOS中继承UIViewController感到困惑,我有一个父视图控制器,它符合UICollectionViewDataSource协议(在实现文件中的私有接口)。
/* Parent.m */
@interface Parent () <UICollectionViewDataSource>
// this CollectionView is connected to storyboard
@property (weak, nonatomic) IBOutlet UICollectionView *CollectionView;
@end
@implementation Parent
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return self.somecount;
}
@end
然后我创建一个从父级继承的子视图控制器。孩子对UICollectionViewDataSource一无所知,因为父母的私有接口中实现了数据源。
/* child.h */
@interface child : parent
// nothing was mentioned here that parent has a method to set the count using 'somecount'
@end
然后我将viewcontroller从mainstoryboard设置为子视图控制器。
为什么ios从父母的属性'somecount'获取值并设置child的值?
感谢。
答案 0 :(得分:2)
你问:
为什么ios从父级的属性
somecount
获取值并设置子级的值?
子类总是继承其super
类的属性和方法。它们可能是也可能不是公共接口(您没有向我们展示somecount
的声明,因此我们不知道),但无论如何,它们都存在并将在运行时解析(除非您覆盖这些方法) child
中的/ properties,您似乎没有这样做。如果parent
中存在私有方法和属性,则在编译时可能无法从child
看到它们,但它们仍然存在并且在运行时将正常运行。
因此,当具有集合视图的场景指定child
作为集合视图的数据源时,如果child
未实现这些UICollectionViewDataSource
方法,它将自动结束调用parent
的那些。同样,当这些方法中的任何一个引用somecount
时,如果child
没有覆盖它,它将再次调用parent
的相应访问方法。底线child
自动继承parent
的所有行为,方法和属性。