objective-c – “为不存在的方法创建选择器’的Xcode虚假警告’比较:’”

objective-c – “为不存在的方法创建选择器’的Xcode虚假警告’比较:’”,第1张

概述这是一个片段: NSArray *a = [@[@"a", @"b", @"c"] sortedArrayUsingSelector:@selector(compare:)]; XCode(5.0)给了我以下警告: Creating selector for nonexistent method 'compare:' 如何消除这些警告? 此警告与您相关,可以在项目的构建设置中禁用. 将值设置为NO 这是一个片段:

NSArray *a = [@[@"a",@"b",@"c"] sortedArrayUsingSelector:@selector(compare:)];

XCode(5.0)给了我以下警告:

Creating selector for nonexistent method 'compare:'

如何消除这些警告?

解决方法 此警告与您相关,可以在项目的构建设置中禁用.
将值设置为NO并禁用警告.

-Wselector

如果在编译期间找到同一选择器的多个不同类型的方法,则发出警告.检查在编译的最后阶段的方法列表上执行.此外,对出现在@selector(…)表达式中的每个选择器执行检查,并在编译期间找到该选择器的相应方法.由于这些检查仅在编译结束时扫描方法表,因此如果未达到编译的最后阶段,则不会生成这些警告,例如因为在编译期间发现错误,或者因为正在使用-fSyntax-only选项.

这些也可能很有趣:

-Wundeclared选择器

如果找到引用未声明选择器的@selector(…)表达式,则发出警告.如果在@selector(…)表达式之前没有声明具有该名称的方法,则选择器被视为未声明,在@interface或@protocol声明中显式声明,或隐式在@implementation部分中声明.一旦找到@selector(…)表达式,此选项始终执行其检查,而-Wselector仅在编译的最后阶段执行其检查.这也强制执行编码样式约定,即在使用之前必须声明方法和选择器.

-Wstrict选择器匹配

如果在尝试使用此选择器将消息发送到类型为ID或Class的接收器时,为给定选择器找到具有不同参数和/或返回类型的多个方法,则发出警告.当此标志关闭时(这是默认行为),如果发现任何差异仅限于具有相同大小和对齐的类型,编译器将省略此类警告.

您可以仅使用某些代码行禁用警告

#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wselector"... code which will ignore the warning#pragma clang diagnostic pop

或者只为一个文件忽略它

#pragma GCC diagnostic ignored "-Wselector"

发生此错误时,选择器主要是动态创建的.有时我可以创建一个静态选择器:

SEL selector = NSSelectorFromString(@"compare:");[self fireDelegateSelector:selector];

要么

SEL selector = sel_registername("compare:");[self fireDelegateSelector:selector];

Link to documentation.

总结

以上是内存溢出为你收集整理的objective-c – “为不存在的方法创建选择器’的Xcode虚假警告’比较:’”全部内容,希望文章能够帮你解决objective-c – “为不存在的方法创建选择器’的Xcode虚假警告’比较:’”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1000239.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存