O que posso fazer se dois métodos de chamar uns aos outros e eu não quero fazer um deles pública no arquivo de cabeçalho?

votos
0

Eu tenho dois métodos -a e -b. -a chama, por vezes, -b, e -B às vezes chama -a. Ambos os métodos são destinados a ser privado, e não chamou do lado de fora.

Mas eu tinha que fazer um deles pública no arquivo .h, porque caso contrário o compilador iria enlouquecer e dar uma advertência para qualquer um deles.

Existe alguma solução válida e boas práticas para esse problema?

Publicado 19/05/2009 em 16:21
fonte usuário
Em outras línguas...                            


3 respostas

votos
7

Tradicionalmente, o que você faria é definir uma categoria (algo como @interface MyClass (MyClass_Private)dentro do arquivo de implementação que declara os métodos privados. A Apple introduziu recentemente um recurso chamado uma extensão de classe que se destina a este caso exato. É basicamente uma especialização de uma categoria, mas a classe tem de implementar os métodos quando ele é primeiro definida parece.:

@interface MyObject ()
    - (void)setNumber:(NSNumber *)newNumber;
@end
Respondeu 19/05/2009 em 16:30
fonte usuário

votos
1

Se você realmente quer as funções para ser privada, você precisa declará-los como static. Para eliminar a dependência cíclica, deve ser declarado antes que o outro está definido. Aqui está um exemplo simples:

static void b(); /* forward declaration */

static void a()
{
    if (foo)
        b(); /* forward-declared, so we're ok */
}

static void b()
{
    if (bar)
        a(); /* already defined, so we're ok */
}

Isso tudo é válido C, e assim com base no comentário do OP Suponho que isso é válido ObjC também.

Respondeu 21/05/2009 em 02:48
fonte usuário

votos
1

Implementar um protocolo .

ou

Escrever um segundo arquivo de cabeçalho com uma categoria .

Respondeu 19/05/2009 em 16:29
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more