2

我的崩溃报告服务显示了 iOS 应用程序的大量神秘崩溃。出于几个原因,我怀疑代码试图在没有特定选择器的对象上执行选择器。

如何静态分析代码以找到错误的选择器?

我正在 OS X 10.8 上使用 Xcode 4.6 编写 Objective-C 代码。我可以使用一个工具,它不会调用诸如调用 performSelector 之类的东西,其中选择器是从字符串构建的等等。我认为一个基本工具会起作用。

4

1 回答 1

3

从 Xcode 的“产品”菜单中选择“分析”。或按shift+ command+ B

它对于识别 MRC 中的常规内存管理内容非常宝贵。但它对 ARC 程序仍然有用。

您可能还想尝试为所有异常设置异常断点

我还建议您参考Xcode 用户指南的调试和调整您的应用程序部分。或者 Ray Wenderlich 的我的应用程序崩溃了,现在怎么办?系列。


顺便说一句,虽然分析器有帮助,但我认为它不会找到不正确的选择器。您可能想分享您如何使用选择器,因为您使用performSelector的是,通常有更好的模式。有时您必须使用它,但通常还有其他更健壮的模式。或者,如果您绝对需要使用选择器,请添加运行时respondsToSelector检查。例如:

NSAssert([object respondsToSelector:@selector(someMethod:)], @"%@ does not respond to selector someMethod:", object);

或者,如果选择器响应它,则有条件地执行选择器(这是您执行可能以特定 iOS 版本为条件的方法的方式):

if ([object respondsToSelector:@selector(someMethod:)])
    [object performSelector:@selector(someMethod:)];
于 2013-08-15T15:49:55.920 回答