gpt4 book ai didi

objective-c - 为什么在类别中声明方法而不实现它?

转载 作者:行者123 更新时间:2023-12-03 16:52:05 27 4
gpt4 key购买 nike

我正在阅读一个开源项目的源代码,并且在实现文件中遇到了以下类别定义:

@interface QCView (Private)
- (void)_pause;
- (void)setClearsBackground:(BOOL)flag;
@end

起初我以为 setClearsBackground 方法被添加QCView 类定义中。但是,当我搜索此实现文件时,我发现没有 setClearsBackground 方法的实现(尽管此消息被发送到文件中几个位置的 QCView 实例)。

为什么有人会在像 QCView 这样的框架类上声明一个方法,但然后不在任何地方实现该方法?我唯一的猜测是,这是一种绕过编译器并调用未在 QCView.h 文件中声明的方法的方法。但这似乎不太可能,因为开发人员如何知道该方法的实现是否存在?

最佳答案

开发人员可能使用了诸如class-dump之类的工具为了生成列出框架实现的所有方法的 header 。如果您需要访问 SPI 并且没有其他选择,这非常有用。如果没有声明,Objective-C 就会对方法参数做出假设,除了生成警告之外,还可能生成不正确的方法调用。

关于 future 操作系统修订版中未记录的接口(interface)中断的所有常见警告均适用。至少,您应该检查对象是否响应该方法(-[NSObject respondsToSelector])。对于额外的偏执,您可以将调用包装在异常 block 中,以防方法保留但其行为发生变化。

关于objective-c - 为什么在类别中声明方法而不实现它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/725419/

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