客体的范围

我对编程还很陌生,所以我有点不习惯的问题。 当你有一个实例变量,在我的情况下,类型CLLocationManager,在我的appDelegate.m文件中,我想我可以在applicationDidFinishLaunching方法中分配和初始化我的CLLocationManager实例变量。 然后我可以使用一个按钮来启动不同的方法startUpdatingLocation(因为我从另一个类调用它)。 这似乎并没有工作,我想我需要分配/ init在我startUpdatingLocation相同的方法。 真的吗? 我需要stopUpdatingLocation在同一个方法吗? 我的代码如下:

(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。 谢谢。


你原本认为是正确的。 如果您有一个实例变量,该变量在对象的整个生命周期中始终可用(在本例中为您的应用程序委托)。

如果你在做什么不行,那是因为其他问题。 每次调用startUpdating时,都不需要分配新的CLLocationManager。

链接地址: http://www.djcxy.com/p/20339.html

上一篇: Scope of an object, objective

下一篇: Why is my CLLocationmanager delegate not getting called?