Objective-C времени выполнения SIGSEGV на дескрипции - PullRequest
0 голосов
/ 24 января 2011

Я играю во время выполнения target-c и получаю SIGSEGV при попытке напечатать описание объекта:

#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;
}

Так что, если у кого-то есть идея, почему это происходит.Спасибо

1 Ответ

0 голосов
/ 08 мая 2011

objc_msgSend необходимо использовать перед использованием:

desc = (IMP)objc_msgSend(ns, sDesc);
...