XCode ARC同一视图的多个实例

时间:2011-10-31 15:40:22

标签: ios cllocationmanager xcode4.2 automatic-ref-counting

我是iOS开发的新手,我正在编写一个3视图位置应用程序。 第一个视图是应用程序的主视图,第二个视图是具有多个位置的表视图,第三个视图是详细视图,用户可以在其中编辑或向表视图添加新的位置。

我在第一个和第三个视图中使用CLLocationManager,但两者的每个视图都有自己的CLLocationManager实例,因为对于详细视图我需要最好的准确性,而在MainView中我不需要最好的准确性。

所以这是问题所在: 在我的AppDelegate.m中,我收到了一个通知,当应用程序进入前台时会触发:

- (void)applicationWillEnterForeground:(UIApplication *)application
{

    [[NSNotificationCenter defaultCenter] postNotificationName: @"didEnterForeground" object: nil  userInfo: nil];
}

在我的第三个视图中,DetailViewController.m,我在viewDidLoad中注册此通知:

- (void) viewDidLoad {

    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(enteredBackground:) name: @"didEnterBackground"  object: nil];
    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(enteredForeground:) name: @"didEnterForeground"  object: nil];
}

DetailViewController.m中的enteredForeground方法只需要再次启动位置管理器(didEnterBackground方法阻止了他)

- (void) enteredForeground: (NSNotification*) notification {
    [self.locationManager startUpdatingLocation];
}

我正在使用带有ARC的XCode 4.2。 问题是,如果我访问DetailView大约10次,转到后台(来自MainView的f.e.),然后我再次输入前景,然后立即启动10个LocationManagers(这是我的NSLog所说的)。 似乎对于DetailView(以及其他视图),存在相同数量的实例,例如这些视图的访问次数。

如果这些观点消失,也许是因为NSNotification消失了,也许这些观点不会被正确发布?!

如果有人可以帮我解决这个问题,我会很感激,因为很多位置管理员都会非常努力地对电池施加压力。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我相信你需要stopUpdatingLocation才能进入后台。否则,它将产生多个实例。

相关问题