Domanda

Ho un piccolo test dello strumento di base (Objective-C) con cui sto giocando e ho alcune domande ...

#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;
}

In primo luogo, di solito rilascio un oggetto dopo averlo aggiunto a un array, ma ho ragione nel pensare che quello che ho attualmente è giusto perché " tempString " è una stringa letterale e come tale non deve essere allocata o rilasciata?

In secondo luogo, quando eseguo questo (prima dell'esecuzione) ottengo il seguente errore "impossibile leggere il comando di caricamento sconosciuto 0x80000022" se questo è un problema con il mio codice? dalla ricerca su google sembra che potrebbe essere un bug in xCode 3.1.2, qualcuno ha qualche idea?

Finalmente qualsiasi cosa stia facendo di sbagliato, l'idea è di riempire un array con 10 string "Planet_001" fino a " Planet_010 "

EDIT: Ah, vedo, è per via del " = [NSString " bit cioè

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

molte grazie, molto apprezzato -gary-

È stato utile?

Soluzione

tempString non è in realtà una stringa letterale. @ " Planet_% 03d " è una stringa letterale. tempString è un oggetto rilasciato automaticamente, il che significa che verrà rilasciato quando NSAutoreleasePool viene scaricato. Fondamentalmente, la memoria è già gestita e non devi fare nulla.

La regola è: Se nuovo , alloc , copia o retain un oggetto, quindi devi rilasciare . Altrimenti, la memoria è già gestita, probabilmente da un rilascio automatico.

Inoltre, hai dimenticato di rilasciare pool . A parte questo, sembra a posto.

Altri suggerimenti

Un possibile motivo per cui "impossibile leggere il comando di caricamento sconosciuto 0x80000022" l'errore sembra essere che ho eseguito l'aggiornamento a Snow Leopard senza aggiornare contemporaneamente gli strumenti per gli sviluppatori. Sembra che l'errore possa essere causato dal tentativo di utilizzare la versione 10.5 in XCode per compilare in un ambiente 10.6. Lo esaminerò domani.

Xcode 3.2 è ora disponibile nella versione Snow Leopard (Mac OS X 10.6). Dopo aver installato Snow Leopard, esegui l'upgrade a Xcode 3.2 installandolo separatamente dall'immagine del disco di Xcode Tools. Puoi installarlo su versioni precedenti di Xcode o spostarli prima dell'installazione.

PS: quando ho ricevuto il messaggio di errore "Impossibile leggere il comando di caricamento sconosciuto 0x80000022" errore stavo eseguendo OSX 10.6.1 con xCode 3.1.2

evviva -gary-

Quel comando "load" " l'errore è dovuto al fatto che il formato eseguibile è cambiato da iPhone OS 3.0 a iPhone OS 3.1.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top