在目标C中无法理解以下代码?

时间:2011-06-02 12:26:07

标签: objective-c

请参阅以下代码:

文件名:myclass.h

@interface myclass:NSObject
...
@end
@interface NSObject(CategoryName)
....
@end

我不明白如何在同一个.h文件中声明2个@interface指令?和实现文件一样,我们只能实现上述interfaces.eg。

之一

文件名:myclass.m

@implementation myclass
...
@end 

在上面的代码中,我无法编写@implementation Categoryname,因为.h文件的名称是myclass。我如何实现类别中描述的方法。

我的主界面也可以扩展一个类,我在同一个.h文件中定义的类别会扩展另一个类吗?

如何在目标c中将一个类声明为另一个类(嵌套类)?

提前谢谢。

更新

阅读回复后,我还有2个问题

  1. 如果我的.h文件中有2个@interface,我可以在.m文件中有2个@implementation。
  2. 如果我的.h文件中有2个@interface,如果我将.h文件导入另一个文件,我可以访问@interface指令下的方法吗?
  3. 我可以在另一个类的接口中实现类别中声明的方法吗?

1 个答案:

答案 0 :(得分:4)

将其添加为同一文件中的另一个声明,如此

@implementation NSObject (categoryname)

...

@end

所有这些都在开发人员文档的Categories and extensions section中进行了描述。

由于您在同一个接口中扩展了另一个类 - 您需要在实现文件中有一个单独的声明。

编辑回答添加内容:

  1. 是的 - 我刚才这么说。
  2. 是 - 接口公开公共方法。
  3. 在编译树的某处,您必须有一个文件来实现您在类别中声明的方法。大多数人使用特定的命名约定在自己的文件中定义类别。例如uliwitness/uikit。对于您的示例,它将位于NSObject+CategoryName.hNSObject+CategoryName.m中。一旦在类上声明并定义了一个类别,它就可以被该类的所有对象使用。因此,既然您要向NSObject添加扩展,那么无论是否导入头文件,这些方法都可用于从NSObject(几乎所有类)继承的所有类。但是,如果您不导入标头,则会收到编译器警告,即使Objective-C运行时仍然允许调用这些方法。