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中接口和类定义之间的关系[重复]的主要内容,如果未能解决你的问题,请参考以下文章