如果问题没有解释清楚请原谅我。 我正在开发iphone客户端 - 服务器应用程序,我创建了所有的类,实例和ect。我甚至可以发送和解析响应。无论如何,现在我需要在定义的时间段内调用我的方法(例如,在10秒内重复调用它)。我GOOGLE了很多,也看看如何定期调用目标c中的方法?
NSDate但我无法解决..现在,任何人都可以请帮助我如何处理这种情况?非常感谢您
如果问题没有解释清楚请原谅我。 我正在开发iphone客户端 - 服务器应用程序,我创建了所有的类,实例和ect。我甚至可以发送和解析响应。无论如何,现在我需要在定义的时间段内调用我的方法(例如,在10秒内重复调用它)。我GOOGLE了很多,也看看如何定期调用目标c中的方法?
NSDate但我无法解决..现在,任何人都可以请帮助我如何处理这种情况?非常感谢您
您可以创建并安排NSTimer
的实例在给定的时间间隔内调用您的方法。具体见以下便捷的创建方法:
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats
你想要的是NSObject的方法-performSelector:withObject:afterDelay:
。
如果你有它调用它的方法再次调用它,你将会有一个循环的自激延迟轮询方法。
我建议检查一个类变量,看看你是否真的每次都是这样,所以你可以从外面关掉它。
最好的办法是寻找到Grand Central Dispatch,因为你将要在后台运行,这样的:
使用NSTimer
如上所述。
绝对正确,它将免于运行。谢谢你 – 2011-12-23 20:11:54
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有很多了解,但我并不擅长编码。所以你的例子真的是我处理我的问题的神点 – 2011-12-23 22:24:44
再次感谢人..我使它与NSTimer一起工作.. – 2011-12-26 01:27:48
不要忘记标记答案 – 2011-12-27 16:01:34
非常感谢你,我看着你现在发送的方法,因为我知道这是我正在寻找的exatly。 – 2011-12-23 20:08:32