Пустые методы Obj-C удаляются во время компиляции? - PullRequest
1 голос
/ 14 августа 2011

Давайте предположим, что у меня в классе есть такой метод:

- (void)doSomethingOnlyWhenNeeded {
    #ifdef NEEDED

    DO SOMETHING

    #endif
}

Если я определю НЕОБХОДИМОСТЬ, все в порядке. Но если NEEDED не определен, то метод пуст, и я хочу, чтобы он был удален. Есть ли оптимизация, которая удаляет вызовы таких пустых методов? Если нет, то почему это может быть плохой идеей? Если да, то могу ли я это контролировать?

Где найти документацию по этой функции?

Ответы [ 4 ]

2 голосов
/ 14 августа 2011

Они не удаляются во время компиляции, это может быть способом переопределения метода суперкласса, и он остановит вызов этого метода независимо от содержимого метода дочерних классов, вот как я предполагаю, что метод сохраняется снет контента.

0 голосов
/ 15 августа 2011

Возможно, я что-то упускаю, но почему бы вам не обернуть сам метод в блок препроцессора, например,

#ifdef NEEDED
- (void)doSomethingOnlyWhenNeeded {
    DO SOMETHING
}
#endif

Там метода больше нет.: -)

0 голосов
/ 15 августа 2011

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

Но, по сути, если вы не заметили, что ваше приложение работает медленно и на него указывает инструмент, тогда просто делайте то, что вы делаете, и переходите к более важным задачам кодирования. :)

0 голосов
/ 14 августа 2011

Почему бы не использовать ваш #ifdef NEEDED также при потенциальном вызове функции?

Кроме того, вы можете использовать блоки.Сначала вы можете объявить блок:

void (^someBlock)(void);

, а затем создать его при необходимости

#ifdef NEEDED

someBlock = ^{
  //do something
};

#endif

При его вызове вы можете сделать следующее:

if (someBlock)
  someBlock();

Thisне будет вызывать блок, если он не существует.

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