2009-10-08 9 views
5

J'ai besoin de construire un NSMethodSignature arbitraire avec "signatureWithObjCTypes:" dans Cocoa sans avoir un objet que je peux demander une signature avec "methodSignatureForSelector:".Obtention de codages de type pour les signatures de méthode dans Cocoa/Objective-C?

Pour cela, j'ai besoin du codage de méthode, par exemple. est

[email protected]:[email protected] 

pour

(BOOL) isEqual: (id) object 

J'ai essayé @encode (...) pour obtenir un codage de type, mais cela ne semble pas fonctionner pour les fonctions (il en résulte un type inconnu '?). Je ne veux pas encoder manuellement le type de fonction, car ce n'est pas portable à travers différentes runtimes.

Il n'y a pas non plus de méthode déclarée pour obtenir le codage.

Existe-t-il un autre moyen d'obtenir le codage?

Cordialement,

Jochen

Répondre

0

ça ne marche pas tout simplement en utilisant le codage de type inconnu?

? | Un type inconnu (entre autres choses, ce code est utilisé pour les pointeurs de fonction)

AFAIK cela ne devrait pas importer parce que c'est à peu près la taille de l'argument. Les pointeurs de fonction ont la même taille que l'argument standard qui est un int.

+0

Malheureusement, cela ne fonctionne pas, puisque j'ai besoin la méthode complète de codage pour appeler les signatureWithObjCTypes de NSMethodSignature: – Jochen

12

Qu'en est-il quelque chose comme:

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

Ou pour une méthode arbitraire:

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

Voici comment Je l'ai résolu pour l'instant, mais j'ai vraiment besoin d'une solution qui fonctionne sans avoir une méthode déclarée pour obtenir l'encodage. Quelque chose comme @encode (id (id, SEL, int)) qui ne retourne pas '?'. – Jochen

+1

@Jochen: que diriez-vous de '[[NSString stringWithFormat: @"% s% s% s% s ", @encode (id), @encode (id), @encode (SEL), @encode (entier)] UTF8String] ' – user102008

Questions connexes