После некоторого поиска я получил следующее решение: ссылка.
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);
И доступ это как:
CLLocationCoordinate2D* c = (CLLocationCoordinate2D*) [[points objectAtIndex:0] bytes];
Однако кто-то утверждает, что существует утечка памяти здесь? Кто-либо может предложить меня, где утечка и как зафиксировать ее. Далее, существует ли лучший способ сохранить список CLLocationCoordinate2D в NSMutableArray? Дайте пример кода, так как я - новичок Objective C.
Утечки нет, просто пустая трата памяти кучи.
Вы можете просто использовать
CLLocationCoordinate2D new_coordinate;
new_coordinate.latitude = latitude;
new_coordinate.longitude = longitude;
[points addObject:[NSData dataWithBytes:&new_coordinate length:sizeof(new_coordinate)]];
Вот еще один способ, используя встроенный тип NSValue
, который предназначен именно для этой цели:
CLLocationCoordinate2D new_coordinate = { latitude, longitude };
[points addObject:[NSValue valueWithBytes:&new_coordinate objCType:@encode(CLLocationCoordinate2D)]];
Чтобы получить значение, используйте следующий код:
CLLocationCoordinate2D old_coordinate;
[[points objectAtIndex:0] getValue:&old_coordinate];