2011-05-02 60 views
0

我正在观察一个奇怪的行为。我正在执行此方法:应用程序未被暂停

- (void) aLongRunningMethod: (NSString*) input { 
    for (int i = 0; i < 100; ++i) { 
     //Sleep for 1 second 
     [NSThread sleepForTimeInterval: 1]; 
     NSLog(@"Progress: %d", i); 
    } 
} 

在iOS模拟器中,我点击主页按钮。我预计线程会立即被暂停。但是,那不会发生。该方法继续下去。我很确定那不是设计的行为。这是模拟器中的缺陷还是我误解了应用程序的状态转换。

+0

你通过XCode中运行?在这种情况下,你将被附加到调试器,这将阻碍正常的线程启动/停止行为... – adam 2011-05-02 22:22:03

回答

0

任何正在运行的当前/主要runloop有机会完成。但是操作系统保留了杀死任何东西花费太长时间的权利。

如果您在后台线程上执行该方法,当您按下Home按钮时,它将立即挂起。

试试:

[self performSelectorInBackground:@selector(aLongRunningMethod:) withObject:@"Running in background"]; 
+0

是@Black Frog,我认为你的观察结果是正确的。 – 2011-05-03 15:00:40