Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么在类别中声明方法而不实现它?_Objective C_Cocoa - Fatal编程技术网

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

Objective c 为什么在类别中声明方法而不实现它?,objective-c,cocoa,Objective C,Cocoa,我正在阅读一个开源项目的源代码,在一个实现文件中遇到了以下类别定义: @interface QCView (Private) - (void)_pause; - (void)setClearsBackground:(BOOL)flag; @end 起初我认为setClearBackground方法被添加到QCView类定义中。但是,当我搜索这个实现文件时,我没有找到setClearBackground方法的实现(尽管此消息被发送到文件中几个地方的QCView实例) 为什么有人会在像QCView

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

@interface QCView (Private)
- (void)_pause;
- (void)setClearsBackground:(BOOL)flag;
@end
起初我认为
setClearBackground
方法被添加到
QCView
类定义中。但是,当我搜索这个实现文件时,我没有找到
setClearBackground
方法的实现(尽管此消息被发送到文件中几个地方的
QCView
实例)


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

开发人员可能使用了一个工具,例如,以生成列出框架实现的所有方法的标题。如果您需要访问SPI并且没有其他选择,那么这非常有用。在没有声明的情况下,Objective-C对方法参数进行假设,并且除了生成警告之外,还可能生成错误的方法调用


所有关于未记录接口在未来OS版本中中断的常见警告都适用。至少,您应该检查对象是否响应该方法(
-[NSObject respondsToSelector]
)。对于额外的妄想症,您可以将调用包装在异常块中,以防方法保留下来,但其行为发生了变化。

开发人员可能使用了一个工具,例如,以生成列出框架实现的所有方法的标题。如果您需要访问SPI并且没有其他选择,那么这非常有用。在没有声明的情况下,Objective-C对方法参数进行假设,并且除了生成警告之外,还可能生成错误的方法调用


所有关于未记录接口在未来OS版本中中断的常见警告都适用。至少,您应该检查对象是否响应该方法(
-[NSObject respondsToSelector]
)。对于额外的偏执狂,您可以将调用包装在异常块中,以防方法保留但其行为发生更改。

系统编程接口。本质上,任何(技术上)外部可访问的函数或方法都没有明确记录或支持。非常好的答案,谢谢。我下载了类dump并在QuartzComposer.framework上运行它,上面的方法确实出现在输出中,所以我认为可以肯定地说这正是作者所做的。再次感谢。系统编程接口。本质上,任何(技术上)外部可访问的函数或方法都没有明确记录或支持。非常好的答案,谢谢。我下载了类dump并在QuartzComposer.framework上运行它,上面的方法确实出现在输出中,所以我认为可以肯定地说这正是作者所做的。再次感谢。