2012-03-22 41 views
8

可能重複:
Difference between @interface definition in .h and .m file
What is the @interface declaration in .m files used for in iOS 5 projects?將@interface放在.m文件中的邏輯是什麼?

我見過這樣的代碼:

// In Header.h 
@interface Header{} 
@end 

// In Header.m 
@interface Header() 
@end 

我的問題是:

  1. 把它放在2個文件中有什麼區別?
  2. 爲什麼在「.h」文件中的類名後面加上{},爲什麼在「.m」文件中加上「()」?

回答

12
@interface MyClass(){ 
    NSInteger aInt; 

} 
@property(nonatomic,strong) NSString *name; 
@end 

class extension

現代編譯器,這是一個偉大的方式,以decrale方法,實例變量和屬性只在類MyClass的私人使用。

類擴展必須在主實現文件中聲明(不在類別中)。

因此,您可以隱藏頭文件中的實現細節,它們是私有的。

+0

謝謝,真的解決了我的大難題。 – itsaboutcode 2012-03-22 17:42:56

+1

您也可以創建實現屬性,我發現它比類擴展更有用。 – 2012-03-22 17:44:42

+0

要在擴展中使用ivars,您必須使用llvm 3+。 GCC不知道這個語法 – vikingosegundo 2012-03-22 17:45:37

3

這已成爲爲給定類聲明「私有」屬性/方法的常見做法。通過將它們聲明在.m中的匿名類擴展中,這些屬性/方法不會暴露給使用對象。