2012-01-14 101 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

你的應用程序如何崩潰?它在哪裏崩潰?你怎麼確定你有內存泄漏? – 2012-01-14 10:51:44

回答

0

CLLocationCoordinate2D是一個2個double值的簡單結構,而不是NSObject!

您在堆棧上分配CLLocationCoordinate2D並將指針傳遞給NSValue對象中的數據。但是方法返回後堆棧內存將不可用。這就是你的應用崩潰的原因。

您需要以某種方式將CLLocationCoordinate2D轉換爲NSObject。 例如這樣的:

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

valueWithBytes:objCType:創建一個NSValue對象,其中包含傳入其中的內容的副本以及有關如何編碼的信息。這個例程的關鍵是要做他正在做的事情,將CLLocationCordinate2D轉換成一個NSValue,它是一個NSObject子類,可以毫無困難地放入NSArray中。 – gaige 2012-01-16 00:03:31

+0

@ gaige好吧,我不知道這一點。感謝評論! – Felix 2012-01-16 10:06:35

+0

我應該用free來釋放每個CLLocationCoordinate2D地址嗎? – 2012-01-16 16:24:11

相關問題