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

У меня есть некоторые проблемы с памятью с 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..

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам