Frage

Ich habe ein kleines Fundament Werkzeugtest (Objective-C), die mit denen ich 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;
}

Als erstes in der Regel löse ich ein Objekt, nachdem es zu einem Array hinzufügen, aber bin ich recht in der Annahme, dass ich zur Zeit, was haben, ist richtig, weil „tempString“ ein Zeichenfolgenliteral ist, und als solche muss nicht zugeordnet oder freigegeben werden ?

Zweitens, wenn ich laufe diese (vor der Ausführung) ich folgendes eror „nicht in der Lage, unbekannter Ladebefehl 0x80000022 zu lesen“, wenn dies ein Problem mit meinem Code? von der Suche auf Google sieht es aus wie es einen Fehler in Xcode 3.1.2 sein könnte, jemand irgendwelche Ideen?

Schließlich alles, was ich falsch mache, ist die Idee, ein Array mit 10 string „Planet_001“ bis hin zu „Planet_010“

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, sehr geschätzt -gary -

War es hilfreich?

Lösung

tempString ist nicht wirklich ein Stringliteral. @"Planet_%03d" ist ein String-Literal. tempString ist ein Autoreleased Objekt, was bedeutet, dass es freigegeben wird, wenn die NSAutoreleasePool abgelassen wird. Grundsätzlich ist der Speicher bereits geschaffen und Sie haben nichts zu tun.

Die Regel lautet: Wenn Sie new alloc copy oder retain ein Objekt, dann haben Sie release es. Andernfalls wird der Speicher bereits gelungen, wahrscheinlich durch eine Autofreigabe.

Auch vergessen Sie pool zu lösen. Other than that, es sieht gut aus.

Andere Tipps

Ein möglicher Grund für die „nicht in der Lage unbekannt Ladebefehl 0x80000022 zu lesen“ Fehler scheint zu sein, dass ich auf Snow Leopard aktualisiert haben, ohne dass die Entwickler-Tools zur gleichen Zeit zu aktualisieren. Es sieht aus wie der Fehler möglicherweise durch den Versuch verursacht werden, um die Version 10.5 zu XCode verwendet in einer 10,6-Umgebung zu kompilieren. Ich werde diese morgen suchen.

Xcode 3.2 ist jetzt im Snow Leopard (Mac OS X 10.6) Version verfügbar. Snow Leopard, ein Upgrade auf Xcode 3.2, indem sie es getrennt von dem Xcode Tool Disk-Image Nach der Installation installieren. Sie können es gegenüber früheren Versionen von Xcode installieren, oder sie zur Seite schieben vor der Installation.

PS: Als ich die „nicht in der Lage, unbekannter Ladebefehl 0x80000022 lesen“ Fehler Ich lief OSX 10.6.1 mit xCode 3.1.2

prost -gary -

Die „Ladebefehl“ Fehler sind aufgrund der Tatsache, dass das ausführbaren Datei-Format von iPhone OS 3.0 auf iPhone OS 3.1 geändert hat.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top