在Objective-C中计时和重复执行线程

时间:2011-05-07 18:27:34

标签: objective-c multithreading cocoa-touch ios nsthread

我想知道我是否能够重复执行一个线程(比如在scheduledTimerWithTimeInterval中使用NSTimer方法时)。我有一个视图控制器,其中有一个方法我希望它可以手动(通过单击按钮)执行,也可以自动执行(通过计时方法执行)。问题是,这个方法将连接远程服务器,它会更新视图上的结果,所以我不希望它阻塞主线程(视图控制器线程)。

我不知道该怎么用,所以如果有人知道怎么做,请告诉我:) 提前谢谢..

2 个答案:

答案 0 :(得分:0)

如果你正在使用NSURLConnection,它是异步的。这可能会满足您的需求。

答案 1 :(得分:0)

听起来你可能正在使用NSURLConnection,如果是这种情况,那么就像joshpaul所说的那样,它默认会异步行动。也就是说,当你开始连接时,NSURLConnection对象将创建一个新线程,在该线程上完成它的工作,并通过delegate methods在原始线程上将结果返回给你,清理之后的第二个帖子。这意味着在连接完成其工作时,不会阻止原始线程(主要与否)。然后,您需要做的就是创建计时器的动作并运行连接。

在其他情况下,您有几个选择。设置一个定时器方法很容易,该方法将调用另一个在后台执行的方法:

- (void)periodicMethodTimerFire:(NSTimer *)tim {
    [self performSelectorInBackground:@selector(myPeriodicMethod:)
                           withObject:myPeriodicArgument];
}

这可能很难从其他线程获取结果(因为您需要将对原始线程的引用传递给该方法)。但是,由于您似乎在主线程上,您可以使用performSelectorOnMainThread:withObject:waitUntilDone:传递NO wait参数来返回。

更复杂的选项是设置你自己的后台线程并在其上运行一个计时器,但如果真的有必要,我会感到惊讶。

相关问题