我正在阅读一个开源项目的源代码,我在实现文件中遇到了以下类别定义:
@interface QCView (Private) - (void)_pause; - (void)setClearsBackground:(BOOL)flag; @end
起初我以为该setClearsBackground
方法被添加到QCView
类定义中.但是当我搜索这个实现文件时,我发现没有一个setClearsBackground
方法的实现(虽然这个消息被发送到QCView
文件中的几个地方的实例).
为什么有人会在框架类上声明一个方法,QCView
但是却没有在任何地方实现该方法?我唯一的猜测是,这是绕过编译器并调用未在QCView.h
文件中声明的方法的一种方法.但这似乎不太可能,因为开发人员如何知道这种方法的实现甚至存在?
开发人员可能使用类转储等工具来生成标题,列出框架实现的所有方法.如果您需要访问SPI并且没有其他选择,这非常有用.如果没有声明,Objective-C会对方法参数进行假设,除了生成警告之外,还可能会生成不正确的方法调用.
关于未来操作系统修订版中未记录的界面的所有常见警告均适用.至少,您应该检查对象是否响应该方法(-[NSObject respondsToSelector]
).对于额外的偏执,您可以将调用包装在异常块中,以防方法保留但其行为已更改.