gpt4 book ai didi

objective-c - 我如何指定 UIApplicationDelegate 协议(protocol),并且仅指定 UIApplicationDelegate 协议(protocol)?

转载 作者:搜寻专家 更新时间:2023-10-30 20:05:44 28 4
gpt4 key购买 nike

Xcode 基于模板生成了这个头文件:

// this file is XYZAppDelegate.h  
#import <UIKit/UIKit.h>
@interface XYZAppDelegate : UIResponder <UIApplicationDelegate>
....
@end

为了让编译器弄清楚 UIApplicationDelegate 是什么,它是这样工作的?
(1) 整个UIKit框架(UIKit.h)已经导入。
(2) UIApplication.hUIKit.h 中指定的众多头文件之一。
(3) 然后在 UIApplication.h 中指定 UIApplicationDelegate 协议(protocol)。

为了我的理解,我可以写一个:
@interface XYZAppDelegate:UIResponder <direct-reference-to-protocol>

也许,像这样:
@interface XYZAppDelegate:UIResponder <UIKit.UIApplication.UIApplicationDelegate>

最佳答案

要在编译器需要知道的类上指定协议(protocol)。唯一的方法是指定

@protocol MyProtocol
...
@end

这也是类、类别等的情况。

编译器与任何 C 编译器一样,逐个文件处理。它可以也不会记住它在运行之间看到的任何东西。这意味着,为了能够知道 MyProtocol 是什么,必须为编译器提供类似上面的协议(protocol)定义在同一个文件中

因为总是指定一百万次会很烦人,C 语言的人几十年前就发现,如果有预处理器指令在指令所在的位置插入特定文件,那就太好了。这就是 #include 诞生的时候。

#import#include 基本相同,只是它还会检查文件之前是否已被包含,而不会像那样多次执行>#include 就可以了。两者都只是获取文件并假装该文件的全部内容都在指令的位置 - 仅此而已。

由于 C 和 Objective-C 都没有框架级别的命名空间,编译器知道的每个符号都可以而且必须通过指定其名称来简单地使用。您可能从 Java(如 System.out.println())或其他编程语言中了解到的命名空间的 . 语法之类的东西并不存在。

关于objective-c - 我如何指定 UIApplicationDelegate 协议(protocol),并且仅指定 UIApplicationDelegate 协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20599636/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com