Objective c 无法理解目标C中的以下代码?

Objective c 无法理解目标C中的以下代码?,objective-c,Objective C,请参阅以下代码: 文件名:myclass.h @interface myclass:NSObject ... @end @interface NSObject(CategoryName) .... @end 我不明白我们如何在同一个.h文件中声明2@interface指令?就像在实现文件中一样,我们只能实现上面的一个接口 文件名:myclass.m @implementation myclass ... @end 在上面的代码中,我无法编写@implementation Categoryn

请参阅以下代码:

文件名:myclass.h

@interface myclass:NSObject
...
@end
@interface NSObject(CategoryName)
....
@end
我不明白我们如何在同一个.h文件中声明2@interface指令?就像在实现文件中一样,我们只能实现上面的一个接口

文件名:myclass.m

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

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

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

先谢谢你

更新

在阅读了回答之后,我还有两个问题

  • 如果在.h文件中有2@接口,那么在.m文件中可以有2@实现
  • 如果我的.h文件中有2@interface,并且如果我将该.h文件导入另一个文件,我可以访问这两个@interface指令下的方法吗
  • 我可以在另一个类的接口中实现类别中声明的方法吗

  • 将其作为另一个声明添加到同一文件中,如下所示

    @implementation NSObject (categoryname)
    
    ...
    
    @end
    
    所有这些都在开发人员文档中描述

    由于要在同一接口中扩展不同的类,因此需要在实现文件中有一个单独的声明

    编辑以回答添加内容:

  • 是的,我刚才说过
  • 是-接口公开公共方法
  • 在编译树的某个地方,必须有一个实现在类别中声明的方法的文件。大多数人在自己的文件中使用特定的命名约定定义类别。例如,它位于
    NSObject+CategoryName.h
    NSObject+CategoryName.m
    中。在类上声明并定义了一个类别后,该类别的所有对象都可以使用它。因此,由于要向NSObject添加扩展名,因此无论是否导入头文件,这些方法都可用于从NSObject继承的所有类(实际上是所有类)。但是,如果不导入标头,则会收到编译器警告,即使Objective-C运行时仍允许调用这些方法

  • 将其作为另一个声明添加到同一文件中,如下所示

    @implementation NSObject (categoryname)
    
    ...
    
    @end
    
    所有这些都在开发人员文档中描述

    由于要在同一接口中扩展不同的类,因此需要在实现文件中有一个单独的声明

    编辑以回答添加内容:

  • 是的,我刚才说过
  • 是-接口公开公共方法
  • 在编译树的某个地方,必须有一个实现在类别中声明的方法的文件。大多数人在自己的文件中使用特定的命名约定定义类别。例如,它位于
    NSObject+CategoryName.h
    NSObject+CategoryName.m
    中。在类上声明并定义了一个类别后,该类别的所有对象都可以使用它。因此,由于要向NSObject添加扩展名,因此无论是否导入头文件,这些方法都可用于从NSObject继承的所有类(实际上是所有类)。但是,如果不导入标头,则会收到编译器警告,即使Objective-C运行时仍允许调用这些方法

  • 类别位于中的NSObject上question@JeremyP-助教。我太专注于myclass位了。那么类别是否在NSObject上又有什么关系呢?它只关系到您声明实现的方式。类别扩展了一个类-因此您需要在声明中指定该类。在你进一步思考之前,先阅读一下我提供的链接文档。这里有一些例子和比我在这里给出的更深入的解释question@JeremyP-助教。我太专注于myclass位了。那么类别是否在NSObject上又有什么关系呢?它只关系到您声明实现的方式。类别扩展了一个类-因此您需要在声明中指定该类。在你进一步思考之前,先阅读一下我提供的链接文档。这里有一些例子和比我在这里能给出的更深刻的解释。