Objective-C中接口和类定义之间的关系[重复]

Posted

技术标签:

【中文标题】Objective-C中接口和类定义之间的关系[重复]【英文标题】:Relationship between interface and class definitions in objective-c [duplicate] 【发布时间】:2014-09-10 05:56:02 【问题描述】:

以下是我的 AppDelegate.h 文件:

#import <UIKit/UIKit.h>    

@class ViewController;  

@interface AppDelegate : UIResponder <UIApplicationDelegate>    
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;

@end

以下是一个名为 ViewControllerTEST.h 的文件,其中包含 AppDelegate.h 使用的 ViewController 接口的声明:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end

我的问题:

当 AppDelegate.h 中的“@class ViewController”行运行时,编译器如何知道在哪里可以找到 ViewController 接口的声明?换句话说,编译器在执行 AppDelegate.h 中的“@class ViewController”行时,如何知道 ViewController 类的接口是在 ViewControllerTEST.h 中定义的?

【问题讨论】:

【参考方案1】:

看起来有人重命名了现在称为 ViewControllerTEST.h 文件的文件。它最有可能最初称为 ViewController.h。

默认情况下,如果您的头文件或实现文件有如下一行:“@interface ViewController : ...”,那么实际的 .h 或 .m 文件将命名为 ViewController.h 或 ViewController.m。当您创建一个新类(文件 -> 新建 -> 文件 -> 目标 C 类)时就是这种情况。

无论如何,您实际上可以在创建这些 .h 和 .m 文件后更改它们的文件名并仍然保持连接(尽管不要忘记更改 .m 文件中相应的“#import ...”部分)。重要的是不要更改“@interface ...”和“@implementation ...”部分中的控制器名称,以便它们是两个不同名称的视图控制器。这将在 Xcode 中产生错误。

说了这么多,当你第一次创建类时,Xcode 会跟踪实际的类名(“ViewController”)。除非您在 Xcode 中执行 Refactor,否则这在您目前的学习中不是一个重要的主题。

希望这会有所帮助...

【讨论】:

这是否意味着 Xcode 在内部将类名从 @class ViewController 匹配到一个名为 ViewController.h 的文件(最初创建的)?就算 ViewController.h 改名了? 如果有,内部是怎么做的?这似乎很危险...感谢您的帮助!

以上是关于Objective-C中接口和类定义之间的关系[重复]的主要内容,如果未能解决你的问题,请参考以下文章

java中接口和类之间是啥关系?

java接口和类的区别在那里.

interface Part2(定义接口)

Objective-C学习笔记(十九)——对象方法和类方法的相互调用

java中接口和类有啥区别java中接口和类有啥区别

解析在C#中接口和类的异同