【发布时间】:2014-05-07 19:44:00
【问题描述】:
下面的 sn-p 取自 Apple 的 ObjC 运行时 (libobjc) 源代码。我想知道这到底是什么意思。 (不是很适合谷歌,抱歉)
// 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]");
更新:
以下是对 bypass_msgSend_release() 的调用生成的内容:
movl -4(%ebp), %eax
movl %eax, (%esp)
calll "-[NSObject release]"
【问题讨论】:
-
这些似乎是对保留、释放和自动释放的显式调用,以规避编译器反对相同的愿望。至于他们为什么会出现,我不知道。
-
这是在哪个文件中?
-
我认为这是绕过 ARC,这将禁止通话。但我猜在这一点上。非常有趣的发现。
-
欢迎再次编辑;我不是要改变你的问题,只是让它更清楚。请注意,标题中不需要标签,并且代码本身就在问题中,因此可以在搜索中找到。我建议严格的散文描述最适合标题。
-
@mojuba - 字符串只是方法的实际链接器可见名称。它在引号中,因为它包含非标准字符。
标签: objective-c assembly inline-assembly libobjc