0

我对编程还是很陌生,所以我有一个菜鸟问题。当您在我的 appDelegate.m 文件中有一个实例变量时,在我的 CLLocationManager 类型的情况下,我想我可以在 applicationDidFinishLaunching 方法中分配和初始化我的 CLLocationManager 实例变量。然后我可以使用一个按钮以不同的方法启动UpdatingLocation(因为我是从另一个类调用它)。这似乎不起作用,我认为我需要在与 startUpdatingLocation 相同的方法中分配/初始化。真的吗?我是否需要以相同的方法停止更新位置?我的代码如下:

(locationManager is declared as a property)


- (void)stopUpdating {
    [locationManager stopUpdatingLocation];
}

- (double)distanceTraveled {
    return distanceTraveled;
}

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

    // Override point for customization after application launch
    [window addSubview:rootController.view];    
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [window makeKeyAndVisible];
}

- (void)startUpdating {
    [locationManager startUpdatingLocation];
}

看来我应该这样做更像:

- (void)startUpdating {
locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;
        locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
}

如果我应该这样做第二种方式,是因为 CLLocationManager 对象的范围仅适用于它所在的方法吗?我认为将它作为实例变量可以在其他方法中使用它,并且我可以为 startUpdatingLocation 和 stopUpdatingLocation 提供单独的方法。谢谢。

4

1 回答 1

2

你最初认为的是正确的。如果您有一个实例变量,则该变量在对象的整个生命周期内都对您可用(在这种情况下是您的应用程序委托)。

如果您正在做的事情不起作用,那是因为其他一些问题。您不需要在每次调用 startUpdating 时分配一个新的 CLLocationManager。

于 2010-10-24T15:48:55.443 回答