使名称错误的选择器生成编译时错误

sas*_*ang 7 objective-c

在objective-c中,如何使错误名称的选择器生成编译时错误?

例如,说我有这个

 @selector(some_misnamed_func)
Run Code Online (Sandbox Code Playgroud)

我的班级有这个成员

  -(void)some_func
Run Code Online (Sandbox Code Playgroud)

我希望objective-c编译器告诉我它在编译时找不到该函数,而不是仅在运行该代码时生成运行时异常.

小智 10

在Xcode的构建设置中使用-Wundeclared-selectorUndeclared选择器编译代码.由于这只是一个警告,您可以将其与-Werror(在Xcode中将警告视为错误)相结合,以使该警告(以及所有其他警告)表现为错误并有效中止编译.


zou*_*oul 6

如果可见文件中没有这样的选择器,编译器可以发出警告.如果你打开警告作为错误,你会得到一个很好的错误.问题在于,如果你把正确的选择器误认为是其他现有的选择器(即使在一个完全不同的类中),编译器也不会说出任何东西.这是由于后期绑定,编译器无法知道类将在运行时响应的所有消息.