В obj-c / iPhone SDK как заставить mthod вызывать себя? - PullRequest
1 голос
/ 28 марта 2009

У меня есть метод, который мне нужно повторять, пока не будет выполнено определенное условие. Я использую заявление как:

если (условие не выполнено) {

запустить этот метод снова

} еще {

}

Но я не знаю, как «запустить этот метод снова». Метод называется runAction, поэтому я попытался [self runAction], но он вызвал ошибку времени выполнения.

Любая помощь приветствуется.

Спасибо

Ответы [ 2 ]

3 голосов
/ 28 марта 2009

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

- (void)runAction
{
    [self runAction]; // Stack Overflow on this line ;)
}
2 голосов
/ 28 марта 2009

rpetrich дал вам правильный ответ, но рассматривали ли вы вместо этого использование цикла?

while (condition is not met)
{
  // logic that affects condition.
}

Также, если «условие» зависит от внешних сил (пользовательский ввод, загрузка и т. Д.), То ни один из них не является правильным, и вы можете вызвать взаимоблокировку - в этом случае два случая не могут быть завершены, поскольку они оба ждут другого.

Если это так, вы должны использовать таймер, который проверяет состояние каждые XXX секунд или около того. Самый простой способ - использовать функцию «executeSelector», которую можно использовать для запуска вызова через определенное время.

1008 * Е.Г. *

-(void)someFunc
{
  if(!condition)
  {
    [self performSelector:@selector(someFunc) withObject:nil afterDelay:1.0];
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...