2009-10-08 5 views
5

Ho bisogno di costruire un NSMethodSignature arbitrario con "signatureWithObjCTypes:" in Cocoa senza avere un oggetto che posso chiedere una firma con "methodSignatureForSelector:".Ottenere le codifiche del tipo per le firme dei metodi in Cocoa/Objective-C?

Per questo, ho bisogno della codifica del metodo, che ad es. è

[email protected]:[email protected] 

per

(BOOL) isEqual: (id) object 

ho provato @encode (...) per ottenere una codifica tipo, ma questo non sembra funzionare per le funzioni (si traduce in un tipo sconosciuto '?'). Non voglio codificare manualmente il tipo di funzione, poiché non è portatile su runtime diversi.

Non esiste inoltre un metodo dichiarato per ottenere la codifica da.

C'è un altro modo per ottenere la codifica?

saluti,

Jochen

risposta

0

non è vero solo di lavoro utilizzando la codifica tipo sconosciuto?

? | Un tipo sconosciuto (tra le altre cose, questo codice è usato per i puntatori di funzioni)

AFAIK non dovrebbe avere importanza perché è solo la dimensione dell'argomento. I puntatori di funzione hanno le stesse dimensioni dell'argomento standard che è un int.

+0

Purtroppo questo non funziona, dal momento che mi serve la codifica completa metodo da chiamare signatureWithObjCTypes di NSMethodSignature: – Jochen

12

Che dire qualcosa come:

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

O per un metodo arbitrario:

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

Ecco come L'ho risolto per ora, ma ho davvero bisogno di una soluzione che funzioni senza avere un metodo dichiarato per ottenere la codifica. Qualcosa come @encode (id (id, SEL, int)) che non restituisce '?'. – Jochen

+1

@Jochen: che dire di '[[NSString stringWithFormat: @"% s% s% s% s ", @encode (id), @encode (id), @encode (SEL), @encode (int)] UTF8String] ' – user102008

Problemi correlati