<a target="_blank" href="http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSLog">NSLog()</a> uma função muito útil durante os estágios iniciais de um projeto para testar e depurar um aplicativo para o Apple iPhone ou, mais geralmente, no ambiente XCode. Sendo apenas uma função, assim como o outro, sua presença será sentida mesmo quando liberar (release) executável nosso. potrebbero influire sulle performance della nostra applicazione, soprattutto se abbiamo inserito NSLog() all'interno di loop. Por isso, torna-se necessário remover, de alguma forma, todas as linhas de NSLog() do nosso código, porque não é necessário, seja porque as chamadas para NSLog() poderia afetar o desempenho da nossa aplicação, principalmente se colocarmos NSLog() para 'loop interno.
Imediatamente descartar a solução para o "olhar" e "cancel" porque um dia não poderia ser utilizado novamente. Excluímos também a solução do "olhar" e "Comentários", desconfortável para a razão mesma de antes. Felizmente um ambiente limpo, simples e estão usando as condicionais de compilador corretas. O que fazemos na prática, e diz ao compilador para excluir - se houver uma condição específica - quando compilar as nossas linhas de origem que contêm NSLog() .
As compilações de directivas e instruções do compilador condicional, são um poderoso e generalizado. Aqueles que vem do desenvolvimento da ANSI-C certamente sabem muito bem e vai utilizzte em muitas situações. A peculiaridade dessas "instruções" reside no fato de, acima mencionado, para ser visto pelo compilador e não executável. Esta característica torna útil em muitos casos e podem resolver os problemas de outra maneira muito irritante.
Vamos ver um exemplo de código que, como previsto, você pode "apagar" por compilar pedaços de código, no nosso caso NSLog() :
1 2 3 4 5 6 | # Define ACTIVE_NSLOG 1 / / Se a constante é definida ACTIVE_NSLOG preencher / Bloco / de código entre # ifdef e # endif # Ifdef ACTIVE_NSLOG " ... bla bla" ) ; NSLog (@ "... blah blah"); # Endif |
). Declarações condicionais são parte do compilador da mesma família como #define , também, na verdade, são precedidos por um "quilo" ( # ). solo se ACTIVE_NSLOG è definito. No exemplo mostrado, nós definimos uma constante ACTIVE_NSLOG ; linhas subseqüentes do código diz ao compilador para "incluir" linha NSLog() somente se ACTIVE_NSLOG está definido. Se teve o cuidado, durante a escrita do nosso código, inserindo chamadas para NSLog() dentro do bloco #ifdef ... #endif per far sparire, alla prossima compilazione, tutti i nostri NSLog() . #ifdef ... #endif , basta apagar a definição da constante ACTIVE_NSLOG a desaparecer, a compilação seguinte, toda a nossa NSLog() .
A melhor e final
Vamos agora ver como definir o ambiente XCode para melhorar ainda mais o que fizemos aqui! Primeiro vamos escolher um nome constante que usamos em nossos projetos para excluir da compilação NSLog() . o quello che preferite. Você pode escolher o nome que quiser, de DEBUG para MIO_DEBUG ou o que você preferir. Abra o seu projeto, novo ou velho. Coloque tudo NSLog() dentro do bloco (ou blocos):
1 2 3 | # Ifdef MIO_DEBUG " ... bla bla" ) ; NSLog (@ "... blah blah"); # Endif |
Selecione o arquivo principal do seu projeto, clique direito e escolha o Get Info.

Isso abre uma janela com informações sobre o projeto:

Selecione a guia Build, verifique se você está em configuração de depuração (esta é a jóia), vá até a seção definida pelo usuário e adicionar, por meio do botão no canto inferior esquerdo, um novo campo chamado OTHER_CFLAGS . Neste assegnamoli o valor -DMIO_DEBUG=1 . A sintaxe é -D{mia define}=1 .
Este procedimento tem duas vantagens:
- Não devemos colocar o código
#define MIO_DEBUG 1, mas fazê-lo através das informações do projeto. Então, quando vamos para preencher a versão de lançamento (aquele sem oNSLog()) devemos nos lembrar de apagar a linha#define MIO_DEBUG 1 - A constante é definido em relação à configuração, no nosso caso de depuração. Em seguida, passando para a configuração de lançamento (release) estará ausente e as linhas constantes com
NSLog()não serão compilados
Conclusões
O procedimento acima pode ser útil em alguns casos moltidutine outros, com NSLog() , não têm nada a ver. Declarações condicionais pode ajudar o compilador em uma ampla variedade de contextos. Eles são freqüentemente usados por programadores para determinar o tipo de versão do sistema operacional, o alvo, a presença de processadores matemáticos, mantendo a mesma fonte "idêntico".
Para entender isso, como exemplo, podemos utilizzre nossa constante MIO_DEBUG também a intervir em outras áreas do código:
1 2 3 4 5 6 7 8 9 10 | / Debug / se ganhar o jogo / / Com uma pontuação de 100 em vez de 10000 :) # Ifdef MIO_DEBUG score == 100 ) if (score == 100) # Else score == 10000 ) if (score == 10000) # Endif { ; [HaiVinto auto]; } |
Para terminar, aqui estão alguns exemplos e suas variantes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | / / Em geral, há um # Se a expressão / / Se instrução semelhante à tradicional, portanto, com uma expressão plena / / Verificar se uma constante é definida # Ifdef constante / / Ver se ele não é uma constante definida # Ifndef constante / / Else # Else / Fecho / do bloco # Endif |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | / / Por exemplo ... # Define DEBUG 1 # Define MIA_ALTRA_COSTANTE 5 ... # Se DEBUG / / Preencha este # Else / / Caso contrário, preencha este outro # Endif # Se MIA_ALTRA_COSTANTE> 4 "..." ) ; NSLog (@ "..."); # Endif |
1 2 3 4 | # Ifndef INCLUDE_MIO_FILE # Define INCLUDE_MIO_FILE # Include "mio_file.h" # Endif |






Últimos Comentários
Marcos : Muito obrigado, eu tenho aceso
Eu resolvi que por definição [cc_objc] OptionViewController.m / / - ...
Giovambattista Fazioli : @ Mark: Eu sugiro que você acha que uma abordagem mais correta. Se você executar a subclasse do guia ...
Marcos : Desculpe o spam .. Notei que há um erro .. aqui é a correção [cc_objc] / PrimaClasse.h **** / # import ...
Marco : esquecido .. em [cci] OptionViewController [/ cci] para [cci] @ sintetizar [/ cci] eu coloquei o delegado
louis : muito clara e simples eu tenho que admitir que escrever um pouco pa usar delegados criados por ...