奇思妙想 · 2024年 4月 23日 0

为什么ObjC向一个对象发送它无法处理的消息,编译器只是警告不报错?

49 次浏览

这就是ObjC运行时的魅力,编译器查找已有的头文件,没看到这个对象能处理此消息,但ObjC宁愿相信运行时可能在其他地方找到实现,这是ObjC最初设计的目标之一,可以不依赖编译期。提示的警告形如:'object' may not respond to 'message'. 运行时查找消息可能会在:继承的子类或分类中找到真正的消息实现。但,运行时真的找不到此消息,就会出运行时异常,形如:unrecognized selector sent to instance xxxx.