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

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

0 голосов
/ 28 сентября 2010

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

0 голосов
/ 28 сентября 2010

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

0 голосов
/ 28 сентября 2010

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

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

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

...