0


Я делаю приложение с дополненной реальностью.
В принципе, у меня есть экран с изображением с камеры, радар и некоторые маркеры на экране.
Я использую CLLocationManager для получения обновлений по моему заголовку и местоположению.
Мне нужны заголовочные обновления, которые всегда включаются, потому что вращение радара зависит от него. Я использую обновления местоположения, чтобы получить свою позицию и основываясь на том, что я ищу маркеры для показа.
Проблема в том, что когда у меня есть оба iPhone, перегрев немного через некоторое время (10 + - минут). У меня есть точность, установленная на каждые 100 метров и расстояние фильтра до 100.
Должен ли я настроить таймер для остановки и начать обновление местоположения, чтобы предотвратить перегрев (и, вероятно, сэкономить некоторое время автономной работы)? Есть ли другой подход для этого?
Спасибо за советы.CLLocationManager Перегрев iPhone

+0

Это, безусловно, звучит так, будто вы как-то перегружаете процессор. У меня когда-то было приложение попало в петлю процессора на телефоне Nokia и перегрело его, чтобы смягчить склеивание экрана. Убедитесь, что ваше приложение не находится в «цикле вращения» где-то, когда оно должно ожидать событий. –

+0

@HotLicks Я не думаю, что это так плохо :), я имею в виду, что это тепло (iphone не очень часто нагревается, поэтому мне странно видеть, что он теплый) в верхнем правом углу, где находится камера (возможно, что-то с сердечником место также). Я проверю профилировщик времени, как предложил Кендалл, и посмотрим, что произойдет – haluzak

ответ

1

Это действительно хорошее время, чтобы пользователь инструмента "Time Profiler". Я уверен, что использование GPS связано с некоторой теплотой, но вы можете легко получить какую-то часть кода, которая слишком сильно использует процессор или графический процессор.

Существует также инструмент для работы с OpenGL, я бы посмотрел на это, чтобы увидеть, можете ли вы найти какие-либо части, которые слишком сильно облагают GPU.

Другая возможность - изучить использование AVFoundation, чтобы получить изображение камеры, и посмотреть, можете ли вы указать более дешевые параметры предварительного просмотра для видеоизображения, которое вы накладываете.

-1
- (id) init 
    { 
self = [super init]; 
if (self != nil) 
{ 
    self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate = self; 

} 
return self; 
    } 
    - (void)locationManager:(CLLocationManager *)manager 
didUpdateToLocation:(CLLocation *)newLocation 
     fromLocation:(CLLocation *)oldLocation 
{ 
NSLog(@"Location: %@", [newLocation description]); 
[self.delegate locationUpdate:newLocation]; 
} 
- (void)locationManager:(CLLocationManager *)managerdidFailWithError:(NSError *)error; 

{  
[self.delegate locationError:error]; 
NSLog(@"Error Error: %@",[error description]); 
} 

Эти функции делегата будут вызываться в классе MyCLConrolleer.m.

Выделите этот класс в классе ViewController следующим образом.

 locationController = [[MyCLController alloc] init]; 
locationController.delegate = self; 
[locationController.locationManager startUpdatingLocation]; 
locationManager = [[CLLocationManager alloc] init]; 
locationManager.delegate = self; 
[locationManager startUpdatingLocation]; 
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; 
showCurrentLocation = NO; 

Делегирование функции View Controller класса

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    [self getLocationNameWithLatitude:newLocation.coordinate.latitude longitude:newLocation.coordinate.longitude]; 
    } 
Смежные вопросы