我想知道我是否能够重复执行一个线程(比如在scheduledTimerWithTimeInterval
中使用NSTimer
方法时)。我有一个视图控制器,其中有一个方法我希望它可以手动(通过单击按钮)执行,也可以自动执行(通过计时方法执行)。问题是,这个方法将连接远程服务器,它会更新视图上的结果,所以我不希望它阻塞主线程(视图控制器线程)。
我不知道该怎么用,所以如果有人知道怎么做,请告诉我:) 提前谢谢..
答案 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
参数来返回。
更复杂的选项是设置你自己的后台线程并在其上运行一个计时器,但如果真的有必要,我会感到惊讶。