使用CLLocationCoordinate2D时内存泄漏

时间:2012-01-14 05:08:14

标签: iphone objective-c

我使用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 :(得分:0)

CLLocationCoordinate2D是2个double值的简单结构,而不是NSObject!

您在堆栈上分配CLLocationCoordinate2D并将指针传递给NSValue对象中的该数据。但是在方法返回后,堆栈内存将不可用。这就是你的应用程序崩溃的原因。

您需要以某种方式将CLLocationCoordinate2D转换为NSObject。 例如:

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