2013-08-03 30 views
3

我得到了在iOS版继承一个UIViewController困惑,我有这符合了UICollectionViewDataSource协议(在实现文件内的专用接口),父视图控制器。子类的UIViewController iOS中

/* 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设置视图控制器作为子视图控制器。

是怎么来的ios得到父母的财产“somecount”的价值,并为孩子的价值?

谢谢。

回答

2

你问:

是怎么来的ios得到父母的财产价值somecount,并为孩子的价值?

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

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

+0

感谢罗布,我试图调试应用程序,它会在第一行是父: @property(弱,非原子)IBOutlet中UICollectionView *的CollectionView; 我认为它可以为父母中的私有财产设置价值的原因是因为故事板知道collectionView是父类的出口。 有无论如何调试故事板上的代码,以便我可以找出起点和步骤的详细流程。 谢谢。 – Justin

+0

让我明确我的问题: 1.如何找出从应用程序开始调用的代码流,以任何方式从故事板一开始就进行调试?即初始化故事板 - 初始化集合视图 - 初始化集合视图的控制器 - 或初始化父母? 2.您提到“底线,孩子会自动继承父级的所有行为,方法和属性。”这是否意味着子类将拥有私有属性(在父级中声明)?但孩子在编译时无法访问它们?我怎么不能访问我自己的财产? – Justin

+0

这里是链接:http://www.stanford。埃杜/班/ cs193p/cgi-bin目录/ Drupal的/系统/文件/ sample_code /漂亮%20Matchismo.zip 看看在CardGameViewController和PlayingCardGameViewController, 感谢 – Justin

相关问题