2012-09-04 41 views
0

可能重複:
Difference between @interface definition in .h and .m fileObj-C「@interface」的類文件?

的OBJ C級文件有兩個文件.H和.M,其中,所述保持.H接口定義(@interface)和.M保持其實現(@implementation)

但是我在某些類中看到在.h和.m中都有一個@interface。

這兩個文件中的@interface的需求是什麼?是否有任何特定的理由這樣做?如果這樣做有什麼優點?

+1

類似的帖子。 http://stackoverflow.com/questions/3967187/difference-between-interface-definition-in-h-and-m-file – iOS

回答

2

.m文件中的@interface宏通常用於私有iVars和屬性以實現有限的可見性。當然,這完全是可選的,但毫無疑問是很好的做法。

1

如果我們想聲明一些私有方法,那麼我們在.m文件中使用@interface聲明。

1

.m文件中出現的@interface通常用於內部類別定義。有將在下面的格式

@interface ClassName (CategoryName) 

@end 

當類別的名稱是空的,因爲下面的格式是一個類名,後跟@interface聲明中,屬性和方法內被認爲是私有的。

@interface ClassName() 

@end 

另請注意,您可能有一個屬性在專用類別中聲明爲readwrite,並在頭文件中只讀。如果兩個聲明都是readwrite,那麼編譯器會發出抱怨。

// .h file 
@interface ClassName 
@property (nonatomic, strong, readonly) id aProperty; 
@end 

// .m file 
@interface ClassName() 
@property (nonatomic, strong) id aProperty; 
@end 
1

在.h文件的@interface一般公共接口,這是你會宣稱繼承中如

@interface theMainInterface : NSObject 

注意一個冒號:然後超級對象這@interface繼承自NSObject,我相信這隻能在.h文件中完成。您也可以聲明@interface與類別,以及諸如

@interface theMainInterface(MyNewCatergory) 

因此,這意味着你可以有多個@interface S IN一個.h文件中像

@interface theMainInterface : NSObject 

     // What ever you want to declare can go in here. 

    @end 

    @interface theMainInterface(MyNewCategory) 

     // Lets declare some more in here. 

    @end 

聲明這些類型的@interface S IN .h文件通常會使其中的所有內容都公開。

但是你可以在.m文件,這將做三件事情的話,會私自延長選定@interface或添加新類別選定@interface或聲明聲明私有@interface個新的私人@interface

你可以通過在.m文件中添加這樣的內容來實現。

@interface theMainInterface() 
     // This is used to extend theMainInterface that we set in the .h file. 
     // This will use the same @implemenation 
    @end 

    @implemenation theMainInterface() 
     // The main implementation. 
    @end 

    @interface theMainInterface(SomeOtherNewCategory) 
     // This adds a new category to theMainInterface we will need another @implementation for this. 
    @end 

    @implementation theMainInterface(SomeOtherNewCategory) 
     // This is a private category added the .m file 
    @end 

    @interface theSecondInterface() 
     // This is a whole new @interface that we have created, this is private 
    @end 

    @implementation theSecondInterface() 
    // The private implementation to theSecondInterface 
    @end 

這些所有的工作方式相同,唯一不同的是,有些是private,有些是public,部分categories

我不確定,如果你能在.m文件的@interface繼承。

希望這會有所幫助。

相關問題