在iOS中继承UIViewController

时间:2013-08-03 03:19:06

标签: ios uiviewcontroller subclassing

我对在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的值?

感谢。

1 个答案:

答案 0 :(得分:2)

你问:

  

为什么ios从父级的属性somecount获取值并设置子级的值?

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

因此,当具有集合视图的场景指定child作为集合视图的数据源时,如果child未实现这些UICollectionViewDataSource方法,它将自动结束调用parent的那些。同样,当这些方法中的任何一个引用somecount时,如果child没有覆盖它,它将再次调用parent的相应访问方法。底线child自动继承parent的所有行为,方法和属性。