2013-08-03 50 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

相關問題