objective-c - guidelines - uialertcontroller preferred style




Existe uma maneira de suprimir avisos no Xcode? (6)

Existe uma maneira de suprimir avisos no Xcode?

Por exemplo, estou chamando um método não documentado e, como o método não está no cabeçalho, recebo um aviso sobre a compilação. Eu sei que posso adicioná-lo ao meu cabeçalho para parar o aviso, mas eu estou querendo saber se há uma maneira diferente de adicioná-lo ao cabeçalho (para que eu possa manter os cabeçalhos limpos e padrão) para suprimir o aviso? Um pragma ou algo assim?


Para o gcc você pode usar

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wshadow-ivar"
// your code
#pragma GCC diagnostic pop

Você pode aprender sobre o pragma do GCC aqui e obter o código de aviso de um aviso no Navegador de Relatórios (Comando + 9), selecionar a compilação mais avançada, expandir o log (o botão '=' à direita) e rolar para o embaixo e lá seu código de aviso está entre colchetes como este [-Wshadow-ivar]

Para clang você pode usar

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow-ivar"
// your code
#pragma clang diagnostic pop

Com Objective-C, vários erros graves aparecem apenas como avisos. Não só nunca desabilito avisos, como normalmente ligo "Tratar avisos como erros" (-Werror).

Todo tipo de aviso em seu código pode ser evitado fazendo-se as coisas corretamente (normalmente, lançando objetos no tipo correto) ou declarando protótipos quando você precisar deles.


Para desativar os avisos em uma base por arquivo, usando o Xcode 3 e o llvm-gcc-4.2, você pode usar:

#pragma GCC diagnostic ignored "-Wwarning-flag"

Onde nome de aviso é algum sinalizador de aviso do gcc.

Isso substitui quaisquer sinalizadores de aviso na linha de comando. Não funciona com todos os avisos embora. Adicione -fdiagnostics-show-option às suas CFLAGS e você poderá ver qual sinalizador pode ser usado para desabilitar esse aviso.


Para se livrar do aviso: tente criar uma interface de categoria para o objeto em questão

@interface NSTheClass (MyUndocumentedMethodsForNSTheClass)

-(id)theUndocumentedMethod;
@end
...

@implementation myClass : mySuperclass

-(void) myMethod {
...
   [theObject theUndocumentedMethod];
...
}

Como um aparte, aconselho vivamente a não chamar métodos não documentados no código de expedição. A interface pode e vai mudar, e será sua culpa.


Suprimir esse aviso específico não é seguro. O compilador precisa conhecer os tipos de argumentos e retornar a um método para gerar o código correto.

Por exemplo, se você está chamando um método como este

[foo doSomethingWithFloat: 1.0];

que leva um float, e não há nenhum protótipo visível, então o compilador irá adivinhar que o método leva um double, não um float. Isso pode causar falhas e valores interpretados incorretamente. No exemplo acima, em uma pequena máquina endian como as máquinas intel, o método receptor veria 0 passado, não 1.

Você pode ler por que nos documentos AB3 i386 , ou você pode apenas corrigir seus avisos. :-)


existe uma maneira mais simples de suprimir avisos de variáveis ​​não usadas:

#pragma unused(varname)

EDIT: fonte: http://www.cocoadev.com/index.pl?XCodePragmas

ATUALIZAÇÃO: Eu vim com uma nova solução, mais robusta

  1. Abra a guia Projeto> Editar Destino Ativo> Construir.
  2. Em User-Defined : localize (ou crie se você não encontrar um) a chave: GCC_WARN_UNUSED_VARIABLE defina como NO .

EDIT-2 Exemplo:

BOOL ok = YES;
NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);

o compilador mostra o aviso de variável não usada para ok .

Solução:

BOOL ok = YES;
#pragma unused(ok)
NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);

PS: Você também pode definir / redefinir outro aviso: GCC_WARN_ABOUT_RETURN_TYPE : YES/NO







suppress-warnings