0
我與Objective-C的運行時間玩,讓試圖打印對象的描述,當SIGSEGV SIGSEGV:Objective-C運行於descrption
#include <objc/runtime.h>
#include <stdio.h>
#include <stdlib.h>
int
main()
{
// SEL sAlloc = sel_registerName("alloc");
SEL sInit = sel_registerName("init");
SEL sDesc = sel_registerName("description");
id desc;
Class nAuto = (Class)objc_getClass("NSAutoreleasePool");
Class nObject = (Class)objc_getClass("NSObject");
// Avoid __NSAutoreleaseNoPool warrning
id nsAuto = class_createInstance(nAuto, 0);
objc_msgSend(nsAuto, sInit);
id ns = class_createInstance(nObject, 0);
objc_msgSend(ns, sInit);
desc = objc_msgSend(ns, sDesc);
printf("%s\n", class_getName(ns->isa));
printf("%s\n", class_getName(desc->isa)); // SIGSEGV triggered
NSLog(desc);
return EXIT_SUCCESS;
}
因此,如果任何人有一個想法,爲什麼這種情況正在發生。由於
`objc_msgSend`有一個解釋。在調用之後,有一個cltq指令,該指令將eax寄存器擴展爲rax。所以我只是想知道爲什麼`objc_msgSend`被聲明返回一個32位指針? – mathk 2011-01-24 15:21:50