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
注意冒号:
然后这个@interface
inheritance自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声明。