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