下面的代码段取自Apple的ObjC运行时(libobjc)源代码.我想知道这究竟意味着什么.(不是google-able,对不起)
// HACK -- the use of these functions must be after the @implementation
id bypass_msgSend_retain(NSObject *obj) asm("-[NSObject retain]");
void bypass_msgSend_release(NSObject *obj) asm("-[NSObject release]");
id bypass_msgSend_autorelease(NSObject *obj) asm("-[NSObject autorelease]");
Run Code Online (Sandbox Code Playgroud)
更新:
以下是对bypass_msgSend_release()的调用:
movl -4(%ebp), %eax
movl %eax, (%esp)
calll "-[NSObject release]"
Run Code Online (Sandbox Code Playgroud) 我在Crashlytics中得到了如下所示的崩溃.
我无法理解应用程序中的这个形式.不幸的是,我自己从来没有能够产生这种崩溃,但它是在野外发生的.
应用程序名称只有一个引用,并且没有任何内容可以显示应用程序的来源.
事实上,没有关于应用程序在何处发生的数据,这表明在didFinishLaunchingWithOptions期间发生了一个问题,因此实际上没有足够的距离显示任何进一步的细节?或者是否有其他原因导致数据中缺少日志以显示问题所在?
任何人都可以建议我如何追踪这个?
Thread : Crashed: com.apple.main-thread
0 libobjc.A.dylib 0x0000000195de3bd0 objc_msgSend + 16
1 CoreFoundation 0x0000000183fd9458 CFRelease + 524
2 CoreFoundation 0x0000000183fe5a18 -[__NSArrayM dealloc] + 152
3 libobjc.A.dylib 0x0000000195de9724 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 564
4 CoreFoundation 0x0000000183fdd074 _CFAutoreleasePoolPop + 28
5 Foundation 0x0000000184f0e588 -[NSAutoreleasePool release] + 148
6 UIKit 0x0000000188be03f4 -[UIApplication _run] + 588
7 UIKit 0x0000000188bdaf40 UIApplicationMain + 1488
8 _THE_APP_NAME_ 0x0000000100031e20 main (main.m:16)
9 libdyld.dylib 0x000000019647aa08 start + 4
Crashed: com.apple.main-thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x00000000f5b2beb8
Run Code Online (Sandbox Code Playgroud)
我在这个帖子的评论中添加以下内容.此代码是与UI相关的主要更改,除了通常的标签设置等,我无法看到问题.
下面的代码被添加到AppDelegate.m,DidFinishLaunchingWithOptions. …