Область применения объекта, объекта-C, CllocationManager

StackOverflow https://stackoverflow.com/questions/4008872

  •  25-09-2019
  •  | 
  •  

Вопрос

Я все еще довольно новичок, чтобы программировать, поэтому у меня есть несколько вопросов Noob. Когда у вас есть переменная экземпляра, в моем случае типа CllocationManager, в моем файле AppDelegate.M, я подумал, что смогу выделить и инициализировать переменную экземпляра CllocationManager в методе ApplicationDIDFINISHLAUCHING. И тогда я мог бы использовать кнопку для запуска в другом методе (так как я называю его из другого класса). Это, похоже, не работает, и я думаю, что мне нужно было ALLOC / init в том же методе, который я запускует товар. Это правда? Должен ли мне остановить слово в том же методе? Мой код ниже:

(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 только для метода, в котором он находится? Я подумал, что имеющуюся в качестве переменной экземпляра, я смогу использовать его в других методах, и я мог бы иметь отдельный метод запуска для запуска и стоп-сигнала. Спасибо.

Это было полезно?

Решение

То, что вы изначально думали, верны. Если у вас есть переменная экземпляра, что переменная остается доступной для вас в течение всего срока службы объекта (в этом случае ваш делегат приложения).

Если то, что вы делаете, не работает, это из-за другого выпуска. Вам не нужно выделять новый CllocationManager каждый раз, когда вы звоните StartUpdating.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top