【问题标题】:In obj-c/iPhone SDK how do I get a mthod to call itself?在 obj-c/iPhone SDK 中,我如何获得调用自身的方法?
【发布时间】:2009-03-27 23:59:42
【问题描述】:

我有一个方法需要重复,直到满足某个条件。我正在使用如下语句:

如果(条件不满足){

再次运行此方法

} 否则 {

}

但我不知道如何“再次运行此方法”。该方法称为runAction,所以我尝试了[self runAction],但它导致了运行时错误。

任何帮助表示赞赏。

谢谢

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    从内部调用方法是合法的,但如果调用无穷大,可能会导致堆栈溢出

    - (void)runAction
    {
        [self runAction]; // Stack Overflow on this line ;)
    }
    

    【讨论】:

      【解决方案2】:

      rpetrich 给了你正确的答案,但你是否考虑过使用循环来代替?

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

      此外,如果“条件”取决于外部力量(用户输入、下载等),那么这些都不正确,您可能会导致死锁 - 这是两个案例无法完成的地方,因为它们都在等待另一个。

      如果是这种情况,您应该使用每 XXX 秒左右检查一次条件的计时器。最简单的方法是使用 'performSelector' 函数,该函数可用于在指定时间后触发调用。

      例如

      -(void)someFunc
      {
        if(!condition)
        {
          [self performSelector:@selector(someFunc) withObject:nil afterDelay:1.0];
        }
      }
      

      【讨论】:

      • 您可能还想查看 NSCondition 而不是使用忙等待循环。
      猜你喜欢
      • 1970-01-01
      • 2011-09-09
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      相关资源
      最近更新 更多