如何定期调用目标c中的方法?

时间:2011-12-23 19:56:47

标签: objective-c cocoa nsdate

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

NSDate但我无法解决..现在,有人可以帮助我如何处理这种情况吗?非常感谢你

4 个答案:

答案 0 :(得分:14)

您可以创建并安排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

答案 1 :(得分:4)

你最好的选择是调查Grand Central Dispatch,因为你想在后台运行它:

使用上面提到的NSTimer

答案 2 :(得分:3)

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

Click for docs

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

我建议每次检查一个类变量,看看你是否真的这么说,所以你可以从外面把它关掉。

答案 3 :(得分:3)

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,因为我无法将数字正确传递给方法。但如果你没有任何参数,它就更容易了。只需使用计时器语法创建它,然后在完成后使其无效