Objective-C中接口和类定义之间的关系

6 浏览
0 Comments

Objective-C中接口和类定义之间的关系

以下是我的AppDelegate.h文件:

#import 
@class ViewController;
@interface AppDelegate : UIResponder 
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;
@end

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

#import 
@interface ViewController : UIViewController
@end

我的问题是:

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

0
0 Comments

Objective-C中接口和类定义之间的关系是通过文件名来实现的。默认情况下,如果头文件或实现文件中有类似以下的行:"ViewController : ...",那么实际的.h或.m文件将被命名为ViewController.h或ViewController.m。这是在创建一个新类时的情况(文件->新建->文件->Objective C类)。

然而,在创建这些.h和.m文件后,你实际上可以更改文件名并且仍然保持连接(但不要忘记在.m文件中相应的"#import ..."部分进行更改)。重要的是不要改变" ..."和" ..."部分中的控制器名称,这样它们就是两个不同命名的视图控制器。否则,这将在Xcode中产生错误。

话虽如此,Xcode在你首次创建类时会跟踪实际的类名("ViewController")。除非在Xcode中执行重构(Refactor)操作,否则不会改变这个类名。

希望这能帮到你...

所以这是否意味着Xcode内部将ViewController类名与原始命名为ViewController.h的文件进行匹配?即使ViewController.h被改成了其他名称?

如果是这样,内部是如何实现的呢?这似乎很危险...谢谢帮助!

0