【问题标题】:How to make a periodic call to a method in objective c?如何定期调用目标c中的方法?
【发布时间】:2012-01-27 01:16:04
【问题描述】:

如果问题没有解释清楚,请见谅。 我正在开发一个 iphone 客户端-服务器应用程序,我创建了所有的类、实例等。我什至可以发送 get 并解析响应。无论如何,现在我需要在定义的时间段内调用我的方法(例如,在 10 秒内重复调用它)。我google了很多,也看看

NSDate 但我无法解决.. 现在,谁能帮我处理这种情况?非常感谢

【问题讨论】:

    标签: objective-c cocoa nsdate


    【解决方案1】:

    最好的办法是查看Grand Central Dispatch,因为你会想在后台运行它:

    使用上面提到的NSTimer

    【讨论】:

      【解决方案2】:

      Grand Central Dispatch 将创建一个不同的线程来运行。因此,如果计时器方法(如下所示和上面建议的)滞后于您的应用程序,您需要将命令放在单独的线程上。

      NSTimer 是你应该使用的。例如,如果您想重复从按下按钮启动的方法,您可以这样做

      - (void)viewDidLoad
      {
          [super viewDidLoad];
          [cameraControlButtonUp addTarget:self action:@selector(cameraControlButtonUpPressed) 
                forControlEvents:UIControlEventTouchUpInside];
      }
      
      -(IBAction)buttonDown:(id)sender{
           NSInteger tag = [sender tag];
      
          if (tag==1) {  
              buttonCounter=1;
              timer = [[NSTimer scheduledTimerWithTimeInterval:.5 target:self selector:@selector(sendJoin) userInfo:nil repeats:YES]retain];
          }
      }
      
      -(void)sendJoin
      {
          switch (buttonCounter) {
              case 1:
                  [cClient userDigitalPushAndRelease:372];
                  break; 
              default:
                  break;
          }
      }
      
          -(void)cameraControlButtonUpPressed
          {
              [timer invalidate];
          }
      

      这将重复命令直到按钮被释放。请记住,您需要将 ibaction 与按钮按下事件(仅按钮按下事件)相关联。以及在 .h 中创建计时器并将按钮标记为 1,您想使用它。

      举一个更基本的例子;它很简单。只需创建您的方法来调用,计时器并将重复设置为YES。然后调用 invalidate 停止它。我不得不创建一个单独的方法sendJoin,因为我无法让数字正确传递给该方法。但如果你没有任何参数,那就更容易了。只需使用计时器语法创建它,然后在完成后使其无效

      【讨论】:

      • 谢谢你,现在我的 Mac 不在我身边,我会尝试你所解释的。我不是一个经验丰富的程序员,尽管我对 C、C++ 和 Java 有很多了解,但我不擅长编码。所以你的例子真的是我处理问题的神点
      【解决方案3】:

      你想要的是 NSObject 方法-performSelector:withObject:afterDelay:

      Click for docs.

      如果你有它调用的方法再次调用它自己,你将有一个循环的、自触发的延迟轮询方法。

      我建议您每次都检查一个类变量,看看您是否真的是认真的,这样您就可以从外部将其关闭。

      【讨论】:

      • 非常感谢,我正在查看您现在发送的方法,因为我发现这正是我想要的。
      【解决方案4】:

      您可以创建和安排NSTimer 的实例以在给定的时间间隔内调用您的方法。尤其看下面的便捷创建方法:

      + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats
      

      http://developer.apple.com/library/ios/#documentation/cocoa/reference/foundation/Classes/NSTimer_Class/Reference/NSTimer.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-22
        • 1970-01-01
        • 2018-07-01
        • 2019-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多