Проблеми с паметта на 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 е силно оптимизирано, така че те вероятно разпределят / стартират доста бързо. Докато не видите проблем с превъртане/perf/памет, бих избрал това, което работи и е лесно за поддръжка.

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

person Kris Markel    schedule 28.09.2010
comment
Съжалявам, забравих да добавя, че се срива. Поправих грешката, като поставих alloc init в друг метод. - person Sidwyn Koh; 28.09.2010