Obj-C“@interface”的类文件?

可能重复:
.h和.m文件中的@interface定义之间的区别

Obj C类文件有两个文件.h和.m,其中.h保存接口定义(@interface),.m保存它的实现(@implementation)

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

这两个文件中的@interface需要什么?是否有任何特定的理由这样做?如果这样做有什么优点?

.m文件中的@interfacemacros通常用于私有iVars和属性以实现有限的可见性。 当然这是完全可以select的,但无疑是很好的做法。

.h文件中的@interface通常是公共接口,这是您将要声明inheritance的那个接口

  @interface theMainInterface : NSObject 

注意冒号:然后这个@interfaceinheritance自NSObject的超级对象,我相信这只能在.h文件中完成。 你也可以用一个类别声明@interface ,比如

  @interface theMainInterface(MyNewCatergory) 

所以这意味着你可以在一个.h文件中有多个@interface

  @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文件中声明这些types的@interface通常会使其中声明的所有内容公开。

但是你可以在.m文件中声明private @interface s,它将执行以下三件事之一,它将私下扩展所选的@interface或者将一个新的类别添加到一个选定的@interface或者声明一个新的private @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

我不确定您是否可以inheritance.m文件中的@interface

希望这可以帮助。

出现在.m文件中的@接口通常用于内部类别定义。 会有一个类别名称,后面跟@interface语句,格式如下

 @interface ClassName (CategoryName) @end 

当类别名称为空格式时,里面的属性和方法被认为是私有的。

 @interface ClassName () @end 

另外请注意,您可能有一个属性在专用类别中声明为只读,并在标题中只读。 如果两个声明都是readwrite,编译器会报错。

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

如果我们要声明一些私有方法,那么我们在.m文件中使用@interface声明。