有没有办法在Objective-C中捕获发送到nil的消息?

Jus*_*cle 11 debugging null objective-c

我刚被一个令人讨厌的bug所困扰,这个bug被Objective-C中的"发送消息给nil确定"行为所掩盖.

我见过发送消息给零?而且共识似乎是'我们如何在Objective-C中滚动'.

现在,也许我没有足够的Objective-C经验,但似乎陷入困境似乎是有用的,因为我无法想到为什么大多数时候应该这样做的一个很好的理由.然而,它可能只是一个我不习惯的编码习语.

所以除了检查nil之外,如此:

assert( object != nil );
[object message];
Run Code Online (Sandbox Code Playgroud)

有没有办法让运行时捕获这种情况,并警告何时object为零?

dic*_*ciu 9

您可以使用ObjC未记录的技巧或dtrace(请参阅dtrace解决方案的注释).

pid$1::objc_msgSend:entry
/arg0==0/
{
  ustack();
}
Run Code Online (Sandbox Code Playgroud)

  • 真棒.当我的眼睛止血时,我会试一试:-) (5认同)