我使用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];
我正在创建这样的几个对象并将其添加到数组中。尽管我在最后标记了自动释放,但是阵列中存在大量内存泄漏。
我在这里做错了什么?
答案 0 :(得分:0)
CLLocationCoordinate2D是2个double值的简单结构,而不是NSObject!
您在堆栈上分配CLLocationCoordinate2D并将指针传递给NSValue对象中的该数据。但是在方法返回后,堆栈内存将不可用。这就是你的应用程序崩溃的原因。
您需要以某种方式将CLLocationCoordinate2D转换为NSObject。 例如:
NSArray* coords = [NSArray arrayWithObjects:[NSNumber numberWithDouble:obj1.latitude], [NSNumber numberWithDouble:obj1.longitude], nil];