Mi método + (void) initialized no se llama y soy muy nuevo en Objective C. El código está en el libro iPhone Game Development y tengo que llamar al método explícitamente a trabajar. El código en el archivo .m es que:+ (void) initialize no llamado (Objective C)
ResourceManager *g_ResManager;
@implementation ResourceManager
//initialize is called automatically before the class gets any other message, per from http://stackoverflow.com/questions/145154/what-does-your-objective-c-singleton-look-like
+ (void) initialize
{
static BOOL initialized = NO;
if(!initialized)
{
initialized = YES;
g_ResManager = [[ResourceManager alloc] init];
}
}
...
@end
Pero en el archivo .h se hace una declaración externa de la variable:
extern ResourceManager *g_ResManager; //paul <3's camel caps, hungarian notation, and underscores.
@interface ResourceManager : NSObject {
...
}
...
@end
He intentado todo (quitar la externa, poner en estático la declaración .m) y siempre obtiene errores de compilación. El código anterior compila, pero el método de inicialización nunca se llama (puso un punto de interrupción para ver eso).
¿Alguna idea?
Esto es exactamente lo que estaba sucediendo. ¡¡¡Muchas gracias!!! Soy de Java y siempre obtengo una NullPointerException en esos casos. : D ¡Gracias de nuevo! – reinaldoluckman
Es bueno saber que funcionó. De todos modos, solo muestra que hay tantos libros de programación de iPhone mal escritos por inexpertos. Ningún desarrollador de Obj-C en su sano juicio sería una variable de instancia externa global. Es una expresión idiomática hacer un '+ sharedFoo' que devuelve la instancia compartida. – Yuji
Cuéntame sobre eso. Eso realmente tiene sentido. Use el patrón singleton y declare una variable externa. Pero debido a mi bajo nivel de conocimiento en Objective-C, me fui de esa manera. Ahora todo está bien. Ya no hay ninguna variable externa. Gracias de nuevo. – reinaldoluckman