如何忽略"没有可见的@interface for X声明选择器"?

use*_*008 7 xcode warnings objective-c ios automatic-ref-counting

在ARC之前,我有一个"X可能没有响应xxx" 警告,这是一个非常无害的警告,不会阻止它编译.现在,我正在尝试将我的项目转换为ARC,并且我有一个"没有可见的@interface for X声明选择器xxx" 错误,这会阻止它编译.

我确切地知道我在做什么,为什么警告在那里,我可以告诉你程序是正确的.以前,编译器编译它没有问题,现在不应该停止编译.

确实,类X的接口没有声明那个选择器,但是X是一个动态处理任何发送给它的选择器的消息的类forwardInvocation:(这是关于Objective-C的美妙事物之一),所以它的接口不可能声明可以在其上调用的所有选择器.并且选择器某处声明,而不是在X上.

jus*_*tin 5

我确切地知道我在做什么,为什么警告在那里,我可以告诉你程序是正确的.

好的 - 只需使用objc_msgSend等.直接如果你想做编译器的工作.

确实,类X的接口没有声明那个选择器,但是X是一个使用forwardInvocation动态处理发送给它的任何选择器的消息的类:(这是关于Objective-C的美妙事物之一),所以它的接口不可能声明可以在其上调用的所有选择器.并且选择器在某处声明,而不是在X上.

如果声明但是不够乏味,在消息传递中使用似乎与您的程序使用选择器相矛盾,那就太麻烦了......听起来像是生成代码的危险区域,需要大量人工干预.

也许您应该考虑声明一个协议,以便编译器至少可以为您正确设置消息调用 - 如果您更改或破坏了某些内容,它就有机会适应或通知您.