使用NSTimer在ios中启动NSThread

时间:2012-01-25 11:13:50

标签: ios nstimer nsthread

我需要每10分钟左右安排一次后台操作。该操作包括从核心数据中收集对象并将其信息上传到Web服务,而不是以任何方式更改它们。

我想到的方法是在app委托中创建一个每10分钟触发一次的nstimer。这将触发NSThread,它将在后台运行操作,不会对用户造成任何干扰。正常退出后,线程将在这里。

我一直在寻找启动一个线程,并在每次执行操作后将其设置为休眠但是计时器方法似乎是最干净的。

网络上的其他建议是使用runloops但是在这种特定情况下我无法看到它的使用。

有没有人有建议或想知道他们如何处理类似的情况。

此致

1 个答案:

答案 0 :(得分:2)

计时器听起来像是实际启动线程的正确方法。要设置它,只需将其放入您的app delegate

[NSSTimer scheduledTimerWithTimeInterval:60.0 * 10.0 target:self selector:@selector(startBackgroundMethod) userInfo:nil repeats:YES];

然后创建这样的背景方法代码:

- (void)startBackgroundMethod
{
    //the timer calls this method runs on the main thread, so don't do any
    //significant work here. the call below kicks off the actual background thread
    [self performSelectorInBackground:@selector(backgroundMethod) withObject:nil];
}

- (void)backgroundMethod
{
    @autoreleasepool
    {
        //this runs in a  background thread, be careful not to do any UI updates
        //or interact with any methods that run on the main thread
        //without wrapping them with performSelectorOnMainThread:
    }
}

至于是否真的有必要在后台线程中完成这项工作,这取决于它是什么。应该避免使用线程,除非由于并发错误的可能性而严格要求,所以如果你告诉我们你的线程将要做什么,我们可以建议基于runloop的方法是否更合适。