gpt4 book ai didi

ios - 消息传递 - 编译器不会检查方法是否存在?

转载 作者:行者123 更新时间:2023-11-29 03:43:05 25 4
gpt4 key购买 nike

在 Objective-C 的 Wiki 页面中,有一个名为 Messages 的部分。 .它说在编译时,Objective-C 并不关心一个对象是否有给定的方法,因为任何人都可以向另一个对象发送消息。这就是动态绑定(bind)。

在 C++ 中,obj->method(参数);如果没有方法,那就错了。在 Objective-C 中,[obj 方法:参数];如果没有办法,也可以。

但是在我的日常编码中,使用XCode,如果编译器找不到对象的公共(public)方法,即使在构建之前它也总是提示错误。像这样,

“ClassName”没有可见的 @interface 声明选择器“methodName”

我对这个“矛盾”有点困惑。如果问题很愚蠢,请原谅我。提前致谢。

最佳答案

我认为编译器只是在保护你免受你自己的伤害。在您注意到的情况下,编译器知道您调用的方法不存在,因此会将其报告为错误。

但是,如果您告诉编译器您不关心或没有向其提供足够的信息,那么它是完全有效的。

例子:

NSString* var = @"Hello";
[(id)var thisDoesNotExist];

id var2 = @"Hello";
[var2 neitherDoesThis:var];

这些(应该)都能编译。

关于ios - 消息传递 - 编译器不会检查方法是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18122490/

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