2010-09-10 56 views
1

當您爲iPad啓動基於SplitViewController的項目時,它會創建一個DetailViewController。在DetailViewController.h,它宣稱爲正常的接口:在兩個不同的位置聲明一個Objective-c接口

@interface DetailViewController : UIViewController <UIPopoverControllerDelegate, UISplitViewControllerDelegate> { 

     UIPopoverController *popoverController; 
     UIToolbar *toolbar; 

     id detailItem; 
     UILabel *detailDescriptionLabel; 
} 

然後,在實現文件(DetailViewController.m),它聲明的接口的其他一些地方:

@interface DetailViewController() 
@property (nonatomic, retain) UIPopoverController *popoverController; 
- (void)configureView; 
@end 

爲什麼他們做這個?在兩個不同的地方/文件中聲明界面有什麼意義?

回答

4

他們創建了一個私人類別。 .m中定義的方法只能在.m中使用,並且不屬於DetailViewController中公佈的接口的一部分。控制器的外部用戶只希望調用.h中定義的那些方法,內部用戶也可以使用私有類別中的那些方法。這也很常見

@interface DetailViewController (Private) 
+1

+1,但它被正式稱爲「Class extension」。 – 2010-09-10 16:30:32

0

第一個是公共接口,第二個是「類繼續」,包含私有方法。

3

這是擴展標準接口的額外方法,您可以實現該具體實現,以便編譯器知道他們。

有關詳細信息,請參閱有關class extensions的Apple文檔。

+0

+1文檔鏈接 – 2010-09-10 16:33:21