Pergunta

Eu tenho um pequeno teste ferramenta fundação (Objective-C) que eu estou jogando com e eu tenho algumas perguntas ...

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

Em primeiro lugar, geralmente eu liberar um objeto após adicioná-lo para uma matriz, mas estou certo em pensar que o que eu tenho atualmente é certo, porque "tempString" é um literal de cadeia, e como tal não precisa ser alocada ou liberada ?

Em segundo lugar, quando eu executar este (antes da execução) recebo a seguinte eror "incapaz de ler comando de carregamento desconhecido 0x80000022" se este um problema com o meu código? a partir de pesquisa no Google parece que ele poderia ser um bug no Xcode 3.1.2, alguém tem alguma idéia?

Finalmente alguma coisa que eu estou fazendo errado, a idéia é preencher uma matriz com 10 string "Planet_001" até "Planet_010"

EDIT:. Ah, eu vejo, isso é por causa do "= [NSString" mordeu ou seja

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

Muito obrigado, muito apreciada -Gary -

Foi útil?

Solução

tempString não é realmente um literal string. @"Planet_%03d" é um literal string. tempString é um objeto autoreleased, o que significa que ele será liberado quando o NSAutoreleasePool é drenado. Basicamente, a memória já é gerenciado e você não tem que fazer nada.

A regra é: Se você new , alloc , copy ou retain um objeto, então você tem que release -lo. Caso contrário, a memória já é gerido, provavelmente por um disparo automático.

Além disso, você esqueceu de pool liberação. Fora isso, ele parece estar bom.

Outras dicas

Uma possível razão para o "incapaz de ler comando de carregamento desconhecido 0x80000022" aparece erro ser que eu tenha atualizado para o Snow Leopard sem atualizar as ferramentas de desenvolvedores ao mesmo tempo. Parece que o erro pode ser causado pela tentativa de usar a versão 10.5 para o Xcode para compilar em um ambiente 10.6. Vou olhar para isso amanhã.

Xcode 3.2 está agora disponível na versão Snow Leopard (Mac OS X 10.6). Depois de instalar o Snow Leopard, atualize para o Xcode 3.2, instalando-o em separado a partir da imagem de disco Ferramentas Xcode. Você pode instalá-lo em relação às versões anteriores do Xcode, ou movê-los de lado antes de instalar.

PS: Quando recebi o "incapaz de ler comando de carregamento desconhecido 0x80000022" erro Eu estava correndo OSX 10.6.1 com o Xcode 3.1.2

aplausos -Gary -

Esse erro "comando de carregamento" é devido ao fato de que o formato executável mudou de iPhone OS 3.0 para o iPhone OS 3.1.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top