Storing CLLocationCoordinates2D in NSMutableArray
Here’s another way, using the builtin type NSValue
which is made for exactly this purpose:
CLLocationCoordinate2D new_coordinate = { latitude, longitude };
[points addObject:[NSValue valueWithBytes:&new_coordinate objCType:@encode(CLLocationCoordinate2D)]];
To retrieve the value use the following code:
CLLocationCoordinate2D old_coordinate;
[[points objectAtIndex:0] getValue:&old_coordinate];
Starting with iOS 6, there's the NSValueMapKitGeometryExtensions for NSValue
:
NSMutableArray *points = [NSMutableArray array];
CLLocationCoordinate2D new_coordinate = CLLocationCoordinate2DMake(latitude, longitude);
[points addObject:[NSValue valueWithMKCoordinate:new_coordinate]];
And to retrieve the value:
CLLocationCoordinate2D coordinate = [[points objectAtIndex:0] MKCoordinateValue];
The NSValueMapKitGeometryExtensions
require MapKit.frameworkCLLocationCoordinate2DMake()
requires CoreLocation.framework,
so these imports are required:
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
There's no leak, just a waste of heap memory.
You could just use
CLLocationCoordinate2D new_coordinate;
new_coordinate.latitude = latitude;
new_coordinate.longitude = longitude;
[points addObject:[NSData dataWithBytes:&new_coordinate length:sizeof(new_coordinate)]];