Storing CLLocationCoordinates2D in NSMutableArray

廉价感情. 提交于 2019-11-27 11:43:02

问题


After some searching, I got the following solution : reference.

CLLocationCoordinate2D* new_coordinate = malloc(sizeof(CLLocationCoordinate2D));
new_coordinate->latitude = latitude;
new_coordinate->longitude = longitude;
[points addObject:[NSData dataWithBytes:(void *)new_coordinate
length:sizeof(CLLocationCoordinate2D)]];
free(new_coordinate);

And access it as:

CLLocationCoordinate2D* c = (CLLocationCoordinate2D*) [[points objectAtIndex:0] bytes];

However, someone claims that there is a memory leak here? Can anyone suggest me where is the leak and how to fix it. Further, is there a better way of storing a list of CLLocationCoordinate2D in NSMutableArray? Please give sample code since I am an Objective C newbie.


回答1:


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)]];



回答2:


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];



回答3:


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.framework
CLLocationCoordinate2DMake() requires CoreLocation.framework, so these imports are required:

#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>


来源:https://stackoverflow.com/questions/2577428/storing-cllocationcoordinates2d-in-nsmutablearray

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!