2010-05-24 6 views
0

J'ai une petite question concernant la gestion de la mémoire dont je ne suis pas sûr. J'ai actuellement un délégué locationManager qui appelle locationManager:didUpdateToLocation:fromLocation où il résout l'emplacement du périphérique. Ma question est que je cherche à ajouter ReverseGeoCoding après avoir obtenu le [newLocation coordinate] mais je ne suis pas sûr de faire le alloc ici, car chaque fois que locationManager:didUpdateToLocation:fromLocation est appelé, je vais allouer un nouveau MKReverseGeoCoder?MKReverseGeocoder déléguer l'emplacement?

// LOCATION 
-(void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation { 

// GeoCoding: 
MKReverseGeocoder *geoCoder = [[MKReverseGeocoder alloc] initWithCoordinate:[newLocation coordinate]]; 
[geoCoder setDelegate:self]; 
[geoCoder start]; 

[self foundLocation]; 
} 

Quelqu'un peut-il me diriger dans la bonne direction à cet égard? J'ai essayé de faire le alloc dans l'application: didFinishLaunchingWithOptions: mais j'ai ensuite réalisé que je n'avais pas accès à [newLocation coordinate].

EDIT_001:

DyingCactus, la raison pour laquelle les méthodes de délégués ne sont pas appelés si vous venez d'ajouter autorelease est je suppose parce que l'objet est d'être libérés, est-ce pas? Je pense que je devenais confus en pensant que MKReverseGeoCoder allait rester et servir tous mes appels. Il semble maintenant que pour chaque locationManager:didUpdateToLocation:fromLocation une nouvelle instance est créée avec chaque appel. C'est ce que j'ai maintenant, qui se sent beaucoup mieux:

// INTERFACE: 
MKReverseGeocoder *reverseGeoCoding; 
@property(nonatomic, retain) MKReverseGeocoder *reverseGeoCoding; 

.

// IMPLEMENTATION: 
self setReverseGeoCoding:[[[MKReverseGeocoder alloc] initWithCoordinate:location] autorelease]]; 
[reverseGeoCoding setDelegate:self]; 
[reverseGeoCoding start]; 

merci beaucoup

gary

Répondre

1

Ajout d'un autorelease il supprime la question de la mémoire mais les méthodes de délégués ne seront pas appelés.

Pour résoudre les problèmes, déclare le géocodage inverse au niveau de la classe. Pour un exemple, voir l'exemple d'application CurrentAddress. De même, si la méthode foundLocation correspond à ce que vous voulez appeler lorsque le géocodage inverse est effectué, appelez-la dans la méthode didFindPlacemark du géocodeur inverse et pas après avoir appelé start.

Questions connexes