1

我在 viewController 中有一个 LocationManager,我想从中监听用户位置的重大变化。然后,当locationManager:didUpdateToLocation:fromLocation:触发时,我通过调用一个自定义对象来执行一些数据处理,该对象是同一个 viewController 的私有属性并且始终是同一个对象:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation
       fromLocation:(CLLocation *)oldLocation
{
   if (dataProcessor == nil) {
    dataProcessor = [[DataProcessor alloc] initWithDefaultValues];
   }

   [dataProcessor processData:someData];
}

反过来,由dataProcessor调用的方法稍后会调用另一个 self 方法,并且此dataProcessor执行的整个处理可能在locationManager:didUpdateToLocation:fromLocation:再次到达之前尚未完成,然后另一个[dataProcessor processData:someData]调用制作。

我的问题是,在这种情况下应该是什么行为?作为被调用的同一个对象,第二个调用是否排队等待第一个调用完成?或者是否可以在从第一个processData调用调用的不同方法的调用之间执行第二个调用?我不知道如何在 Xcode 中查看和调试它。我需要确保按照位置管理器通知新位置的顺序执行和完成数据处理。我目前没有使用我创建的任何线程,也没有使用 GCD 队列,也没有使用信号量,因为我不确定那里到底发生了什么,我不知道我是否需要这些功能中的任何一个。

非常感谢

4

1 回答 1

0

processData方法将作为串行队列执行,因为它是在主线程上执行的。

http://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html

于 2013-01-27T11:14:19.077 回答