Проблемы с памятью CLLocation

У меня проблемы с памятью при использовании CLLocation.

CLLocation *annotation = [[CLLocation alloc] initWithLatitude:[[tempDict objectForKey:@"lat"] doubleValue] longitude:[[tempDict objectForKey:@"lon"]doubleValue]];
CLLocation *item2 = [[CLLocation alloc] initWithLatitude:[newLatString doubleValue] longitude:[newLongString doubleValue]];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%.1f km",[item2 distanceFromLocation:annotation]/1000];
[annotation release];
[item2 release];

Итак, я попытался сделать это, но понял, что вы не можете установить координату аннотации.

CLLocationCoordinate2D tempCoordinate = annotation.coordinate;
tempCoordinate.latitude = [[tempDict objectForKey:@"lat"] doubleValue];
tempCoordinate.longitude = [[tempDict objectForKey:@"lon"] doubleValue];
    annotation.coordinate = tempCoordinate;

Есть ли обходной путь? Я не хочу выделять/инициировать CLLocation каждый раз, когда вызывается cellForRowAtIndexPath.


person Sidwyn Koh    schedule 28.09.2010    source источник
comment
Я делаю CLLocations, чтобы получить DistanceFromLocation. В основном я делаю UITableView с магазинами и их расстояниями от моего текущего местоположения.   -  person Sidwyn Koh    schedule 28.09.2010


Ответы (2)


ваш результирующий объект является NSString - просто создайте класс, который содержит NSString, а также ссылки/варианты промежуточных данных, где это необходимо. затем, используя идиому наблюдателя, просто обновите ячейки при изменении строки (создайте ее так, чтобы строка зависела от координат). вы, вероятно, могли бы создать класс, который принимает набор аргументов при инициализации (например, координаты), создает NSString во время инициализации, а затем ссылается на результат, если ваши данные никогда не меняются. это действительно зависит от того, какие данные, как вы ожидаете, будут мутировать и с какой частотой.

person justin    schedule 28.09.2010

Я не хочу выделять/инициировать CLLocation каждый раз, когда вызывается cellForRowAtIndexPath.

Почему бы нет? Знаете ли вы, что это вызывает проблемы с производительностью? Вы освобождаете их сразу, чтобы они не занимали лишнюю память. CLLocation выглядит как довольно легковесный класс, а среда выполнения Objective-C сильно оптимизирована, поэтому они, вероятно, довольно быстро выделяют / инициализируют. Пока вы не увидите проблемы с прокруткой / производительностью / памятью, я бы выбрал то, что работает и просто в обслуживании.

Преждевременная оптимизация — корень всех зол — Дональд Кнут

person Kris Markel    schedule 28.09.2010
comment
Извините, забыл добавить, что он вылетает. Я исправил ошибку, поместив инициализацию alloc в другой метод. - person Sidwyn Koh; 28.09.2010