【发布时间】:2012-01-27 01:16:04
【问题描述】:
如果问题没有解释清楚,请见谅。 我正在开发一个 iphone 客户端-服务器应用程序,我创建了所有的类、实例等。我什至可以发送 get 并解析响应。无论如何,现在我需要在定义的时间段内调用我的方法(例如,在 10 秒内重复调用它)。我google了很多,也看看
NSDate 但我无法解决.. 现在,谁能帮我处理这种情况?非常感谢
【问题讨论】:
标签: objective-c cocoa nsdate
如果问题没有解释清楚,请见谅。 我正在开发一个 iphone 客户端-服务器应用程序,我创建了所有的类、实例等。我什至可以发送 get 并解析响应。无论如何,现在我需要在定义的时间段内调用我的方法(例如,在 10 秒内重复调用它)。我google了很多,也看看
NSDate 但我无法解决.. 现在,谁能帮我处理这种情况?非常感谢
【问题讨论】:
标签: objective-c cocoa nsdate
最好的办法是查看Grand Central Dispatch,因为你会想在后台运行它:
使用上面提到的NSTimer。
【讨论】:
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,因为我无法让数字正确传递给该方法。但如果你没有任何参数,那就更容易了。只需使用计时器语法创建它,然后在完成后使其无效
【讨论】:
你想要的是 NSObject 方法-performSelector:withObject:afterDelay:。
如果你有它调用的方法再次调用它自己,你将有一个循环的、自触发的延迟轮询方法。
我建议您每次都检查一个类变量,看看您是否真的是认真的,这样您就可以从外部将其关闭。
【讨论】:
您可以创建和安排NSTimer 的实例以在给定的时间间隔内调用您的方法。尤其看下面的便捷创建方法:
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats
【讨论】: