可能重複:
Difference between @interface definition in .h and .m fileObj-C「@interface」的類文件?
的OBJ C級文件有兩個文件.H和.M,其中,所述保持.H接口定義(@interface)和.M保持其實現(@implementation)
但是我在某些類中看到在.h和.m中都有一個@interface。
這兩個文件中的@interface的需求是什麼?是否有任何特定的理由這樣做?如果這樣做有什麼優點?
可能重複:
Difference between @interface definition in .h and .m fileObj-C「@interface」的類文件?
的OBJ C級文件有兩個文件.H和.M,其中,所述保持.H接口定義(@interface)和.M保持其實現(@implementation)
但是我在某些類中看到在.h和.m中都有一個@interface。
這兩個文件中的@interface的需求是什麼?是否有任何特定的理由這樣做?如果這樣做有什麼優點?
.m文件中的@interface宏通常用於私有iVars和屬性以實現有限的可見性。當然,這完全是可選的,但毫無疑問是很好的做法。
如果我們想聲明一些私有方法,那麼我們在.m文件中使用@interface聲明。
.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
在.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
繼承。
希望這會有所幫助。
類似的帖子。 http://stackoverflow.com/questions/3967187/difference-between-interface-definition-in-h-and-m-file – iOS