5 Stimmen

Hinzufügen von String-Objekten zu NSMutableArray?

Ich habe eine kleine Stiftung Tool-Test (Objective-C), dass ich mit spielen und ich habe ein paar Fragen ...

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

Erstens, in der Regel ich ein Objekt freigeben, nachdem Sie es zu einem Array hinzufügen, aber bin ich richtig zu denken, dass was ich habe derzeit richtig ist, weil "tempString" ein Zeichenfolgenliteral ist, und als solche nicht zugewiesen oder freigegeben werden müssen?

Zweitens, wenn ich dies (vor der Ausführung) ausführen, erhalte ich den folgenden Fehler "Unfähig, unbekannten Ladebefehl 0x80000022" zu lesen, wenn dies ein Problem mit meinem Code? von der Suche auf Google sieht es aus wie es ein Fehler in xCode 3.1.2 sein könnte, hat jemand irgendwelche Ideen?

Schließlich etwas, das ich falsch mache, ist die Idee, ein Array mit 10 String "Planet_001" bis "Planet_010" zu füllen

EDIT: Ah, ich sehe, das ist wegen der "= [NSString" Bit d.h..

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

Vielen Dank, ich weiß das sehr zu schätzen -Gary-

5voto

Tom Dalling Punkte 22462

tempString nicht wirklich ein String-Literal ist. @"Planet_%03d" est ein String-Literal. tempString ist ein Autorelease-Objekt, d. h. es wird freigegeben, wenn der NSAutoreleasePool geleert ist. Im Grunde genommen wird der Speicher bereits verwaltet und Sie müssen nichts mehr tun.

Die Regel lautet: Wenn Sie new , alloc , copy o retain ein Objekt, dann müssen Sie release es. Andernfalls wird der Speicher bereits verwaltet, wahrscheinlich durch eine automatische Freigabe.

Außerdem haben Sie vergessen, die pool . Abgesehen davon sieht es gut aus.

1voto

fuzzygoat Punkte 26277

Ein möglicher Grund für den Fehler "Unbekannter Ladebefehl 0x80000022 kann nicht gelesen werden" scheint zu sein, dass ich auf Snow Leopard aktualisiert habe, ohne gleichzeitig die Entwicklerwerkzeuge zu aktualisieren. Es sieht so aus, als ob der Fehler durch den Versuch verursacht wird, die 10.5 Version von XCode zum Kompilieren in einer 10.6 Umgebung zu verwenden. Ich werde mir das morgen ansehen.

Xcode 3.2 ist jetzt in der Version Snow Leopard (Mac OS X 10.6) verfügbar. Nach der Installation von Snow Leopard können Sie ein Upgrade auf Xcode 3.2 durchführen, indem Sie es separat vom Xcode Tools Disk-Image installieren. Sie können es über frühere Versionen von Xcode installieren oder diese vor der Installation zur Seite legen.

PS: Als ich die Fehlermeldung "Unbekannter Ladebefehl 0x80000022 kann nicht gelesen werden" bekam, lief OSX 10.6.1 mit xCode 3.1.2

Prost -Gary-

0voto

Grant Paul Punkte 5754

Der Fehler "Ladebefehl" ist darauf zurückzuführen, dass sich das Format der ausführbaren Datei von iPhone OS 3.0 auf iPhone OS 3.1 geändert hat.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X