Objective c 发送无对象消息是否可以收到警告?

Objective c 发送无对象消息是否可以收到警告?,objective-c,testing,runtime,warnings,null,Objective C,Testing,Runtime,Warnings,Null,我知道在Objective-C中向nil对象发送消息是完全可以的。但是,我很好奇是否有任何运行时支持标记这种情况。我可以看出这在测试/调试情况下很有用。在稍微摆弄一下调试器之后,我发现了这一点 您可以在objc\u msgSend中设置断点,第一个参数的断点条件为零(接收方): 打开“断点”窗口:Command-Option-B 双击最后一行以创建新的符号断点 输入符号:objc\u msgSend 在“条件”列中输入条件:*(int*)($esp+4)==0 当您运行可执行文件时,它会经常中断

我知道在Objective-C中向nil对象发送消息是完全可以的。但是,我很好奇是否有任何运行时支持标记这种情况。我可以看出这在测试/调试情况下很有用。

在稍微摆弄一下调试器之后,我发现了这一点

您可以在
objc\u msgSend
中设置断点,第一个参数的断点条件为零(接收方):

  • 打开“断点”窗口:Command-Option-B
  • 双击最后一行以创建新的符号断点
  • 输入符号:
    objc\u msgSend
  • 在“条件”列中输入条件:
    *(int*)($esp+4)==0
  • 当您运行可执行文件时,它会经常中断,因为向nil发送消息是很常见的。要了解发生的情况,可以进一步配置断点:

  • 按加号按钮添加断点命令
  • 从弹出窗口中选择“调试器命令”
  • 在命令字段中输入
    p(char*)*(int*)($esp+8)
  • 单击断点行中的“自动继续”复选框(最后一列中带有小箭头的复选框)
  • 现在继续执行时,您将在调试器控制台中看到所有消息名(发送到nil)


    以上所有功能仅适用于Intel Mac(模拟器中的32位Cocoa或Cocoa Touch)。PPC或ARM体系结构使用其他寄存器名和调用约定。我把它作为一个练习留给您,让您了解如何在这些平台上工作;)

    或者,您可以使用dtrace:


    这也可以。

    我已经将你的博客添加到我的RSS中——很棒的东西。很酷。我在待办事项列表上还有很多帖子。只是要找时间。