2012-01-14 3 views
0

Я использую NSMutableArray для хранения значений CLLocationCoordinate2D. После тестирования в течение нескольких минут я обнаружил, что приложение рушится. Я нашел большие утечки памяти, связанные как с массивом, так и с значениями 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]; 

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

Что я здесь делаю неправильно?

+0

Как может произойти сбой приложения? Где он падает? Как вы определили, что у вас есть утечки памяти? –

ответ

0

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

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

Вам нужно как-то преобразовать CLLocationCoordinate2D в NSObjects. Например, например:

NSArray* coords = [NSArray arrayWithObjects:[NSNumber numberWithDouble:obj1.latitude], [NSNumber numberWithDouble:obj1.longitude], nil]; 
+0

valueWithBytes: objCType: создает объект NSValue, который содержит копию содержимого, которое было передано ему, и информацию о том, как это кодируется. Точка этой подпрограммы заключается в том, чтобы делать именно то, что он пытается сделать, преобразовать CLLocationCordinate2D в NSValue, который является подклассом NSObject и может быть без сложностей помещен в NSArray. – gaige

+0

@gaige хорошо, я не знал об этом. спасибо за комментарий! – Felix

+0

Должен ли я использовать бесплатно для выпуска каждого из этих адресов CLLocationCoordinate2D? –

Смежные вопросы