Artigos com a tag '# if'

Como remover NSLog () da origem XCode

<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.

getinfo

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

userdefine

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:

  1. 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 o NSLog() ) devemos nos lembrar de apagar a linha #define MIO_DEBUG 1
  2. 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

Leia mais ...


Pare SOPA