2012-03-06 67 views
4

對不起,我的英語,讓我的心說:) 在我工作的一個項目中,我注意到了一個有趣的時刻。* .h和* .m文件中的兩個接口

在* .h文件中聲明的接口:

@interface FrontViewController : UIViewController 
... 
@end 

而在* .m文件我發現了另一個接口。

@interface FrontViewController() 

// Private Properties: 
@property (retain, nonatomic) UIPanGestureRecognizer *navigationBarPanGestureRecognizer; 

// Private Methods: 
- (IBAction)pushExample:(id)sender; 

@end 

@implementation FrontViewController 
... 
@end 

爲什麼需要它?有什麼意義? - 我認爲這是爲了方便。是?

+0

爲什麼這被標記爲C++? – Lou 2012-03-06 20:00:22

+0

因爲我在ObjectiveC++中編程,C++也有頭文件和實現文件。 – 2012-03-06 20:06:01

+1

這已經被回答了很多次。下面是一個:[.h和.m文件中的@interface定義之間的區別](http://stackoverflow.com/questions/3967187/difference-between-interface-definition-in-h-and-m-file) – 2012-03-06 20:09:43

回答

6

這是一個類擴展。它通常用於爲類聲明私有方法和屬性。

閱讀關於它here

+0

嗯,除了我不能在.h文件中指定私有方法嗎?或者,如果我在.m文件私有方法中指定,我會額外檢查.m文件中指定的實現私有方法的編譯嗎? – 2012-03-06 20:32:17

+0

頭是公共可用的類定義。 – mydogisbox 2012-03-06 21:35:02

3

這是一個類擴展。它允許您爲類聲明「私有」方法和屬性,即使您無權訪問源。主要用途是不要將這些方法作爲接口的一部分公開。與大多數語言不同,這些方法是可運行時發現的,所以這些方法的價值在於IDE自動完成,而不是阻止您的類的消費者調用隱藏方法,這就是爲什麼我將私有語言放在引號中的原因。可以在沒有聲明的情況下簡單地定義實現中的方法,但是它們必須在使用它們的任何地方之上實現。將它們聲明爲擴展可以防止這個問題。

如果擴展名被命名,那麼它就成爲一個可以用來在多個文件中分發你的類實現的類。

相關問題