Что я могу сделать, если два метода вызывают друг друга, и я не хочу делать один из них общедоступным в заголовочном файле? - PullRequest
0 голосов
/ 19 мая 2009

У меня есть два метода -a и -b. -a иногда вызывает -b, а -b иногда вызывает -a. Оба метода предназначены для частного использования и не вызываются извне.

Но я должен был сделать один из них общедоступным в файле .h, потому что в противном случае компилятор сойдет с ума и выдаст предупреждение для любого из них.

Есть ли какое-либо действительное и передовое решение для этой проблемы?

Ответы [ 3 ]

7 голосов
/ 19 мая 2009

Традиционно, то, что вы должны сделать, это определить категорию (что-то вроде @interface MyClass (MyClass_Private) внутри файла реализации, который объявляет закрытые методы. Apple недавно представила функцию, называемую расширением класса, которая предназначена именно для этого случая. специализация категории, но класс должен реализовать методы, когда он впервые определен. Он выглядит так:

@interface MyObject ()
    - (void)setNumber:(NSNumber *)newNumber;
@end
1 голос
/ 21 мая 2009

Если вы действительно хотите, чтобы функции были частными, вам нужно объявить их как static. Чтобы устранить циклическую зависимость, одна должна быть объявлена ​​до определения другой. Вот простой пример:

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 */
}

Это все действительный C, и поэтому, основываясь на комментарии OP, я предполагаю, что это также и ObjC.

1 голос
/ 19 мая 2009

Реализация протокола .

или

Написать второй заголовочный файл с категорией .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...