如果问题没有明确解释,请原谅。 我正在开发一个iphone Client-Server应用程序,我创建了所有类,实例等。我甚至可以发送get并解析响应。无论如何,现在我需要在定义的时间段内调用我的方法(例如,在10秒内重复调用它)。我google了很多,也看看
NSDate但我无法解决..现在,有人可以帮助我如何处理这种情况吗?非常感谢你
答案 0 :(得分:14)
您可以创建并安排NSTimer
的实例,以便在给定的时间间隔内调用您的方法。特别参见以下便利创建方法:
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats
答案 1 :(得分:4)
你最好的选择是调查Grand Central Dispatch,因为你想在后台运行它:
使用上面提到的NSTimer
。
答案 2 :(得分:3)
你想要的是NSObject方法-performSelector:withObject:afterDelay:
。
如果你有它调用的方法再次调用它,你将有一个循环的,自我激发的延迟轮询方法。
我建议每次检查一个类变量,看看你是否真的这么说,所以你可以从外面把它关掉。
答案 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
,因为我无法将数字正确传递给方法。但如果你没有任何参数,它就更容易了。只需使用计时器语法创建它,然后在完成后使其无效