afterDelay效率和cancelPreviousPerformRequestsWithTarget

时间:2017-01-31 14:22:43

标签: ios objective-c xcode

两个问题:

  1. 我是否在正确/高效的庄园中使用了afterDelay?我是对Objective-c的新手,所以我只是想确保我正确使用它。

  2. 每当我在时间到来之前再次调用它时,它会开始运行两个方法(这是有道理的)。经过一些研究后,我发现了cancelPreviousPerformRequestWithTarget,但它似乎取消了再次调用该方法的能力。我不确定是否有更好的方法来解决这个问题。

    <input type="text" name="start" id="start">
    

2 个答案:

答案 0 :(得分:0)

试试这段代码,我想你需要这个

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(method name) object:nil]; 

答案 1 :(得分:0)

第一个问题的答案是否定的。可以使用NSTimer和宏NS_ENUM执行此逻辑,以声明具有多个状态的枚举类型YourState(例如YourStateDefault = 0,YourStateRed,YourStateBlack,YourStatePurple)。

为什么这样?因为它可以让您控制逻辑流程和易于维护/调试的解决方案。您可以通过引用currentState属性来检查系统的状态(如下所示)。

  • (void)beginShow:(CGFloat)duration myIncrease:(CGFloat)myIncrease {

    1. 检查计时器是否正在运行,而不是停用它。
    2. 将currentState设置为初始状态值。
    3. 使用repeatInterval = myIncrease设置新计时器,设置值为remainingTime == duration,action:@selector(toggleState)
    4. 运行计时器。 }
  • (void)toggleState { 它应该将currentState属性中保存的当前状态更改为下一个并调用更新UI逻辑。切换操作应仅针对正的remainingTime值执行。

如果retainTime变为负数,则应停用计时器并返回,如果它为正运行逻辑。 使用基于currentState值的switch语句确定下一个应该进入的状态。将当前状态设置为新状态并运行[self changeUIAccordingToState:currentState]。 您还需要在每个切换操作中减少“remainingTime” }

  • (void)changeUIAccordingToState:(YourState)state { 它应该相应地改变颜色和torchToLevel }