3

我对在 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

然后我将 mainstoryboard 中的 viewcontroller 设置为子视图控制器。

ios如何从父属性'somecount'获取值并为孩子设置值?

谢谢。

4

1 回答 1

2

你问:

ios如何从父母的属性somecount中获取值并为孩子设置值?

子类总是继承其super类的属性和方法。它们可能是也可能不是公共接口(您没有向我们展示 的声明somecount,所以我们不知道),但无论如何,它们都存在并且将在运行时解析(除非您覆盖child,你似乎没有这样做)。如果 中有私有方法和属性parent,您可能在编译时从 中看不到child,但它们仍然存在并且在运行时会正常运行。

因此,当带有集合视图的场景指定child为集合视图的数据源时,如果child不实现这些UICollectionViewDataSource方法,它将自动最终调用parent. 同样,当这些方法中的任何一个引用 . 时somecount,如果child没有覆盖它,它将再次最终调用 . 的适当访问器方法parent。底线,child自动继承所有的行为、方法和属性parent

于 2013-08-03T05:58:09.760 回答