2009-10-08 14 views
5

Potrzebuję skonstruować arbitralny NSMethodSignature z "signatureWithObjCTypes:" w Cocoa bez obiektu, który mogę poprosić o podpis z "methodSignatureForSelector:".Otrzymywanie kodowania typu dla podpisów metod w Cocoa/Objective-C?

Do tego potrzebuję metody kodowania, która np. jest

[email protected]:[email protected] 

dla

(BOOL) isEqual: (id) object 

próbowałem @encode (...) w celu uzyskania kodowania typu, ale to nie wydają się działać dla funkcji (skutkuje nieznanego typu '?'). Nie chcę ręcznie kodować typu funkcji, ponieważ nie jest to przenośne w różnych środowiskach wykonawczych.

Nie ma również zadeklarowanej metody uzyskiwania kodowania z.

Czy istnieje inny sposób uzyskania kodowania?

Pozdrawiam,

Jochen

Odpowiedz

0

Czy to nie tylko praca przy użyciu nieznanego kodowanie typu?

? | Nieznany typ (między innymi ten kod jest używany dla wskaźników funkcyjnych)

AFAIK nie powinno mieć znaczenia, ponieważ jest mniej więcej wielkości argumentu. Wskaźniki funkcji mają ten sam rozmiar co standardowy argument, który jest int.

+0

Niestety to nie działa, ponieważ muszę pełny metoda kodowania zadzwonić signatureWithObjCTypes NSMethodSignature za: – Jochen

12

Co o czymś takim:

#import <objc/runtime.h> 
//inside the method implementation: 
Method thisMethod = class_getClassMethod([self class], _cmd); 
const char * encoding = method_getTypeEncoding(thisMethod); 

Albo dla dowolnej metody:

#import <objc/runtime.h> 
//inside the method implementation: 
Method thisMethod = class_getClassMethod([self class], @selector(isEqual:)); 
const char * encoding = method_getTypeEncoding(thisMethod); 
+1

ten sposób Rozwiązałem go na razie, ale naprawdę potrzebuję rozwiązania, które działa bez deklarowanej metody kodowania. Coś takiego jak @ kod (id (id, SEL, int)), który nie zwraca "?". – Jochen

+1

@Jochen: jak o "[NSString stringWithFormat: @"% s% s% s% s ", @ kod (id), @ kod (id), @ kod (SEL), @ kod (int)] UTF8String] ' – user102008

Powiązane problemy