2010-09-28 5 views
0

J'ai des problèmes de mémoire avec CLLocation.Problèmes de mémoire 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]; 

J'ai donc essayé de le faire, mais j'ai réalisé que vous ne pouvez pas définir les coordonnées de l'annotation.

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

Y at-il une solution de contournement? Je ne veux pas être alloc/Initing un à chaque fois de CLLocation cellForRowAtIndexPath est appelé ..

+0

Je fais des CLLocations pour que je puisse obtenir la distanceFromLocation. Fondamentalement, je fais un UITableView avec les magasins et leurs distances de mon emplacement actuel. –

Répondre

0

votre objet résultant est un NSString - il suffit de créer une classe qui contient un NSString, ainsi que des références/Ivars des données intermédiaires si nécessaire . puis, en utilisant un idiome d'observateur, mettez à jour les cellules lorsque la chaîne change (concevez-le pour que la chaîne dépende des coordonnées). vous pourriez probablement créer une classe qui prend un ensemble d'arguments à l'initialisation (par exemple, les coordonnées), crée un NSString pendant l'initialisation, puis se réfère au résultat si vos données ne changent jamais. cela dépend vraiment des données que vous prévoyez de muter, et à quelle fréquence.

0

Je ne veux pas être alloc/Initing un à chaque fois de CLLocation cellForRowAtIndexPath est appelé ..

Pourquoi pas? Savez-vous que cela cause des problèmes de performance? Vous les libérez tout de suite, donc ils ne prennent pas de mémoire supplémentaire. CLLocation ressemble à une classe assez légère, et le runtime d'Objective-C est fortement optimisé, donc ils allouent probablement/init assez rapidement. Jusqu'à ce que vous voyez défiler/perf/mémoire, je voudrais aller avec ce qui fonctionne et est facile à maintenir.

L'optimisation prématurée est la racine de tous les maux - Donald Knuth

+0

Désolé, j'ai oublié d'ajouter qu'il plante. J'ai corrigé le bogue en mettant l'alloc init dans une autre méthode. –