Область применения объекта, объекта-C, CllocationManager
-
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.