Se si lavora con Objective-C, senza il sistema NeXTstep
(OS X
, iOS
, GNUstep
ecc) o semplicemente pensi che questo metodo è più pulita, allora si potrebbe utilizzare il Objective-C language runtime library's API. Sotto 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 ];
Sotto l'Objective-C (1.0 o versione senza nome) che si utilizzano le seguenti:
#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 ];
Non ho ancora testato la versione 1.0
, però ho usato la funzione 2.0
nel codice che è ora in produzione. Personalmente ritengo che l'utilizzo della funzione 2.0
sia più pulito se disponibile rispetto alla funzione NS in quanto occupa meno spazio: the length of the name in bytes + 1 (null terminator)
per l'API 2.0 rispetto a the sum of two pointers (isa, cstring)
, uno size_t length (cstring_length)
e lo length of the string in bytes + 1
per l'API NeXTSTEP
.
Questo non causerà eventuali perdite? – AntiMoron