Question

Je joue avec un petit test de base (Objective-C) et j'ai quelques questions à vous poser ...

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

D'abord, d'habitude, je libère un objet après l'avoir ajouté à un tableau, mais ai-je raison de penser que ce que j'ai actuellement est correct parce que "tempString" est un littéral de chaîne, et en tant que tel n'a pas besoin d'être alloué ou libéré?

Deuxièmement, lorsque j'exécute cette opération (avant son exécution), le message d'erreur suivant s'affiche: "Impossible de lire la commande de chargement inconnue 0x80000022". si c'est un problème avec mon code? En cherchant sur google, on dirait que c’est peut-être un bogue dans xCode 3.1.2, ça vous tente?

Enfin, tout ce que je fais mal, l’idée est de remplir un tableau avec 10 chaînes "Planet_001". jusqu'à "Planet_010"

EDIT: Ah, je vois, c’est à cause de " = = NSString " bit i.e.

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

merci beaucoup, très apprécié -gary -

Était-ce utile?

La solution

tempString n'est pas réellement un littéral de chaîne. @ "Planet_% 03d" est un littéral de chaîne. tempString est un objet autoreleased, ce qui signifie qu'il sera publié à la vidange de NSAutoreleasePool. En gros, la mémoire est déjà gérée et vous n’avez rien à faire.

La règle est la suivante: Si vous nouveau , alloc , copier ou conserver un objet, puis vous devez le libérer . Sinon, la mémoire est déjà gérée, probablement par un autorelease.

De plus, vous avez oublié de publier le pool . Sinon, ça a l'air bien.

Autres conseils

Une des raisons possibles pour l'incapacité de lire la commande de chargement inconnue 0x80000022 " L’erreur semble être que j’ai mis à niveau vers Snow Leopard sans mettre à jour les outils de développement en même temps. Il semble que l'erreur puisse être provoquée en essayant d'utiliser la version 10.5 en XCode pour compiler dans un environnement 10.6. Je vais examiner cela demain.

Xcode 3.2 est maintenant disponible dans la version Snow Leopard (Mac OS X 10.6). Après avoir installé Snow Leopard, effectuez une mise à niveau vers Xcode 3.2 en l’installant séparément à partir de l’image disque Xcode Tools. Vous pouvez l'installer sur des versions antérieures de Xcode ou les déplacer avant de les installer.

PS: Lorsque j'ai reçu le message "Impossible de lire la commande de chargement inconnue 0x80000022". erreur j'exécutais OSX 10.6.1 avec xCode 3.1.2

cheers -gary -

Cette " commande de chargement " Cette erreur est due au fait que le format de l'exécutable a été modifié d'iPhone OS 3.0 à iPhone OS 3.1.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top