Class files of Obj-C “@interface”?
Possible Duplicate:
Difference between @interface definition in .h and .m file
obj c类文件有两个文件.h和.m,其中.h保存接口定义(@interface),.m保存其实现(@implementation)。
但我在一些类中看到.h和.m中都有@interface?
两个文件中对@interface的需求是什么?有什么具体的原因吗?如果这样做有什么好处呢?
.h文件中的
1 | @interface theMainInterface : NSObject |
注意冒号
1 | @interface theMainInterface(MyNewCatergory) |
这意味着你可以在一个.h文件中有多个
1 2 3 4 5 6 7 8 9 10 11 | @interface theMainInterface : NSObject // What ever you want to declare can go in here. @end @interface theMainInterface(MyNewCategory) // Lets declare some more in here. @end |
在.h文件中声明这些类型的
但是您可以在.m文件中声明private
您可以通过向.m文件中添加类似的内容来完成此操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | @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 |
这些都是以同样的方式工作的,唯一的区别是有些是
我不确定你能否继承.m文件中的
希望这有帮助。
.m文件中的@interface宏通常用于专用ivar和属性,以获得有限的可见性。当然,这是完全可选的,但无疑是一种良好的做法。
.m文件中出现的@interface通常用于内部类别定义。将有一个类别名称,后跟以下格式的@interface语句
1 2 3 | @interface ClassName (CategoryName) @end |
当类别名称为空(格式如下)时,其中的属性和方法将被视为私有。
1 2 3 | @interface ClassName () @end |
还请注意,在私有类别中,可能有一个属性声明为readwrite,在头中声明为readonly。如果这两个声明都是读写的,编译器会抱怨。
1 2 3 4 5 6 7 8 9 | // .h file @interface ClassName @property (nonatomic, strong, readonly) id aProperty; @end // .m file @interface ClassName() @property (nonatomic, strong) id aProperty; @end |
如果我们想声明一些私有方法,那么在.m文件中使用@interface声明。