堆栈跟踪中的__forwarding__是什么意思?

Kar*_*arl 9 cocoa objective-c stack-trace message-forwarding

(gdb) bt
#0  0x302ac924 in ___TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION___ ()
#1  0x92077e3b in objc_exception_throw ()
#2  0x302d6ffb in -[NSObject doesNotRecognizeSelector:] ()
#3  0x3026e056 in ___forwarding___ ()
#4  0x3024a0a2 in __forwarding_prep_0___ ()
#5  0x00004ae9 in -[GameObject doesTouch:] (self=0xe893a0, _cmd=0x643ee, obj=0xe82e20) at /Users/aaa/Desktop/CPT/Game/Classes/GameObject.m:220
#6  0x00006e05 in -[StaticGrid checkTouchNearest:] (self=0xe82f20, _cmd=0x64ec3, obj=0xe893a0) at /Users/aaa/Desktop/CPT/Game/Classes/StaticGrid.m:62
#7  0x0000a393 in -[EAGLView touchesBegan:withEvent:] (self=0xe8dad0, _cmd=0x3199fa3c, touches=0x632c0b0, event=0xe14590) at /Users/aaa/Desktop/CPT/Game/Classes/EAGLView.m:459
#8  0x30910f33 in -[UIWindow _sendTouchesForEvent:] ()
#9  0x308faecb in -[UIApplication sendEvent:] ()
#10 0x309013e1 in _UIApplicationHandleEvent ()
#11 0x32046375 in PurpleEventCallback ()
#12 0x30245560 in CFRunLoopRunSpecific ()
#13 0x30244628 in CFRunLoopRunInMode ()
#14 0x32044c31 in GSEventRunModal ()
#15 0x32044cf6 in GSEventRun ()
#16 0x309021ee in UIApplicationMain ()
...
Run Code Online (Sandbox Code Playgroud)

目前我有一个罕见的错误,我还不知道原因.我不知道在哪里看,所以我想问的是前五行(#0到#4)是什么意思?我知道它声称存在一些错误,但是那些像" ___forwarding___" 这样的东西是什么?

如果您对此有所了解,请提供帮助.非常感谢你.

zou*_*oul 20

转发的东西用于呃... ...转发消息.每个对象都可以轻松地将收到的消息转发给其他对象,请参阅Scott Stevenson的优秀教程.当您GameObject收到它不理解的消息时,它会尝试转发它.如果没有实现转发,doesNotRecognizeSelector则调用该方法并获得异常.

详细说明可在该课程的Apple文档中找到NSObject:

当对象被发送没有相应方法的消息时,运行时系统给予接收者将消息委托给另一个接收者的机会.它通过创建表示消息的NSInvocation对象并向接收方发送包含此NSInvocation对象作为参数的forwardInvocation:消息来委派消息.然后,接收者的forwardInvocation:方法可以选择将消息转发给另一个对象.(...)NSObject的forwardInvocation实现:只需调用doesNotRecognizeSelector:方法; 它不转发任何消息.因此,如果您选择不实现forwardInvocation:,则向对象发送无法识别的消息将引发异常.

至于你的错误,似乎GameObject发送了一些它不理解的消息.这可能是一个简单的拼写错误或更精细的内存管理错误,你必须给我们更多的信息.

  • +1好的答案.我想补充一点,这是Objective-C的一个属性,它是一种动态编程语言,其中方法在运行时解析,而不是在编译时解析.这种调用不存在的方法的编写代码本身并不是一个错误,在运行时,您的应用程序可以解析该做什么,非常方便编写代理. (4认同)