Si vous travaillez avec Objective-C sans l' NeXTstep
(OS X
, iOS
, GNUstep
etc) ou vous pense juste que cette méthode est plus propre, alors vous pourriez utiliser l' Objective-C langue de la bibliothèque d'exécution de l'API. En vertu de l' Objective-C 2.0
:
#import <objc/runtime.h>
//Declaration in the above named file
id objc_getClass(const char* name);
//Usage
id c = objc_getClass("Object");
[ [ c alloc ] free ];
En vertu de l'Objective-C (1.0 ou sans nom, version) vous serait d'utiliser les éléments suivants:
#import <objc/objc-api.h>
//Declaration within the above named file
Class objc_get_class( const char* name);
//Usage
Class cls = objc_get_class( "Test" );
id obj = class_create_instance( cls );
[ obj free ];
Je n'ai pas testé l' 1.0
version, toutefois, j'ai utilisé l' 2.0
de la fonction dans le code qui est maintenant en production. Je crois personnellement en utilisant l' 2.0
fonction est plus propre si disponibles, que NS la fonction qu'il consomme moins d'espace: the length of the name in bytes + 1 ( null terminator )
pour l'API 2.0 versus the sum of two pointers (isa, cstring)
, size_t length (cstring_length)
, et l' length of the string in bytes + 1
de la NeXTSTEP
API.