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

相关问题