Хранение CLLocationCoordinates2D в NSMutableArray

После некоторого поиска я получил следующее решение: ссылка.

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.

15
задан Community 23 May 2017 в 10:29
поделиться

2 ответа

Утечки нет, просто пустая трата памяти кучи.

Вы можете просто использовать

CLLocationCoordinate2D new_coordinate;
new_coordinate.latitude = latitude;
new_coordinate.longitude = longitude;
[points addObject:[NSData dataWithBytes:&new_coordinate length:sizeof(new_coordinate)]];
6
ответ дан 30 November 2019 в 23:47
поделиться

Вот еще один способ, используя встроенный тип NSValue , который предназначен именно для этой цели:

CLLocationCoordinate2D new_coordinate = { latitude, longitude };
[points addObject:[NSValue valueWithBytes:&new_coordinate objCType:@encode(CLLocationCoordinate2D)]];

Чтобы получить значение, используйте следующий код:

CLLocationCoordinate2D old_coordinate;
[[points objectAtIndex:0] getValue:&old_coordinate];
70
ответ дан 30 November 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: