Утечка памяти при использовании CLLocationCoordinate2D - PullRequest
0 голосов
/ 14 января 2012

Я использую NSMutableArray для хранения CLLocationCoordinate2D значений.После тестирования в течение нескольких минут я обнаружил, что приложение не работает.Я обнаружил серьезные утечки памяти, связанные как с массивом, так и со значениями CLLocationCoordinate2D.

Вот код:

NSMutableArray *arrayReturn = [[NSMutableArray alloc] init];
CLLocationCoordinate2D obj1 = CLLocationCoordinate2DMake(37.6085289,107.5941445);
CLLocationCoordinate2D obj2 = CLLocationCoordinate2DMake(27.1727738,78.041655);

[arrayReturn addObject:[NSValue valueWithBytes:&obj1  objCType:@encode(CLLocationCoordinate2D)]];
[arrayReturn addObject:[NSValue valueWithBytes:&obj2 objCType:@encode(CLLocationCoordinate2D)]];

return [arrayReturn autorelease];

Я создаю несколько таких объектов и добавляю их в массив.Несмотря на то, что я пометил авто-релиз в конце, у меня сильные утечки памяти в массиве.

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 14 января 2012

CLLocationCoordinate2D - это простая структура из 2 двойных значений, а не объект NSObject!

Вы выделяете CLLocationCoordinate2D в стеке и передаете указатели на эти данные в объектах NSValue.Но память стека не будет доступна после возврата метода.Вот почему ваше приложение вылетает.

Вам необходимо каким-то образом преобразовать CLLocationCoordinate2D в объекты NSObject.Например, как это:

NSArray* coords = [NSArray arrayWithObjects:[NSNumber numberWithDouble:obj1.latitude], [NSNumber numberWithDouble:obj1.longitude], nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...