Pregunta

Tengo una pequeña prueba de herramienta básica (Objective-C) con la que estoy jugando y tengo algunas preguntas ...

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    int planetLoop;
    NSString *tempString;
    NSMutableArray *planetArray = [[NSMutableArray alloc] init];

    NSLog(@"STRING ARRAY ... Start");
    for(planetLoop=0; planetLoop<10; planetLoop++) {
        tempString = [NSString stringWithFormat: @"Planet_%03d", planetLoop+1];
        NSLog(@"Planet_%03d", planetLoop+1);
        [planetArray addObject:tempString];
    }

    [planetArray release];
    [pool drain];
    return 0;
}

Primero, generalmente libero un objeto después de agregarlo a una matriz, pero estoy en lo cierto al pensar que lo que tengo actualmente es correcto porque "tempString" es un literal de cadena y, como tal, no necesita ser asignado o liberado?

En segundo lugar, cuando ejecuto esto (antes de la ejecución) obtengo el siguiente error "no se puede leer el comando de carga desconocido 0x80000022" si esto es un problema con mi código? de buscar en google parece que podría ser un error en xCode 3.1.2, ¿alguien tiene alguna idea?

Finalmente, todo lo que estoy haciendo mal, la idea es llenar una matriz con 10 cadenas "Planet_001" hasta " Planet_010 "

EDITAR: Ah, ya veo, eso se debe a la " = [NSString " bit, es decir,

// Autoreleased object
tempString = [NSString stringWithFormat: @"Planet_%03d", planetLoop+1];
// String literal
tempString = @"Planet_"; 

muchas gracias, muy apreciado -gary-

¿Fue útil?

Solución

tempString no es en realidad un literal de cadena. @ " Planet_% 03d " es un literal de cadena. tempString es un objeto lanzado automáticamente, lo que significa que se lanzará cuando se vacíe NSAutoreleasePool. Básicamente, la memoria ya está administrada y no tiene que hacer nada.

La regla es: Si new , alloc , copie o retener un objeto, luego debe liberar . De lo contrario, la memoria ya está administrada, probablemente por un lanzamiento automático.

Además, olvidó lanzar pool . Aparte de eso, se ve bien.

Otros consejos

Una posible razón para el " no se puede leer el comando de carga desconocido 0x80000022 " El error parece ser que he actualizado a Snow Leopard sin actualizar las herramientas de los desarrolladores al mismo tiempo. Parece que el error puede ser causado al intentar usar la versión 10.5 para XCode para compilar en un entorno 10.6. Investigaré esto mañana.

Xcode 3.2 ahora está disponible en la versión Snow Leopard (Mac OS X 10.6). Después de instalar Snow Leopard, actualice a Xcode 3.2 instalándolo por separado de la imagen de disco de Xcode Tools. Puede instalarlo sobre versiones anteriores de Xcode, o moverlos a un lado antes de la instalación.

PD: cuando recibí el comando "no se puede leer el comando de carga desconocido 0x80000022" error Estaba ejecutando OSX 10.6.1 con xCode 3.1.2

saludos -gary-

Ese " comando de carga " El error se debe al hecho de que el formato ejecutable ha cambiado de iPhone OS 3.0 a iPhone OS 3.1.

http://networkpx.blogspot.com/2009/09 /about-lcdyldinfoonly-command.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top