iOS应用因内存错误而崩溃

时间:2014-03-01 19:05:37

标签: ios iphone memory

由于内存错误,我的应用程序不断崩溃,我无法弄清楚原因。仪器工具告诉我内存增加到70mb,但是当我试着看看是什么时候分配了很多小的malloc,大概是几千字节。

似乎我的问题是这段代码,当移动滑块时,地图上的叠加层将被移除,并绘制一个新的叠加层并添加到地图中。如果我继续前后移动滑块大约20秒,那就是当我收到内存警告然后我的应用程序很快就崩溃了。

- (IBAction)sliderValueChanged:(UISlider *)sender {
shouldCenterMap = YES;


 if (fabs(_slider.value - prevSliderVal) >.1) {
    CGPoint nePoint = CGPointMake(self.mapView.bounds.origin.x + (_mapView.bounds.size.width+_mapView.bounds.size.width*_slider.value)/2, _mapView.bounds.origin.y);
    CGPoint nwPoint = CGPointMake(self.mapView.bounds.origin.x + (_mapView.bounds.size.width - _mapView.bounds.size.width*_slider.value)/2, _mapView.bounds.origin.y);




    //Then transform those point into lat,lng values
    points[0] = [_mapView convertPoint:nePoint toCoordinateFromView:_mapView];

    points[1] = centerPoint;
    points[2] = centerPoint;
    //points[1] = [_mapView convertPoint:sePoint toCoordinateFromView:_mapView];
    //points[2] = [_mapView convertPoint:swPoint toCoordinateFromView:_mapView];

    points[3] = [_mapView convertPoint:nwPoint toCoordinateFromView:_mapView];

    [_mapView removeOverlay:poly];
    poly = [[MKPolygon alloc] init];
    poly = [MKPolygon polygonWithCoordinates:points count:4];
    [_mapView addOverlay:poly];
    prevSliderVal = _slider.value;
 }
}

有没有办法弄清楚导致这个问题的确切原因?我认为可能是覆盖层没有被正确发布的东西。

修改: Poly被声明为正在执行:MKPolygon *poly;

我假设我正在使用ARC,因为我正在使用XCode 5,如果我尝试自动发布任何内容,它会给我带来错误。

编辑2:可能是因为我的应用程序崩溃而不是因为实时内存使用,而是因为它是取消分配并重新分配覆盖并且总内存使用率太高了?乐器似乎告诉我它在任何时候徘徊在大约40mb-60mb的实时内存使用量。

2 个答案:

答案 0 :(得分:0)

代码中唯一可疑的部分可能是MKPolygon poly。您在哪里声明它的代码?

您还可以尝试运行 Leaks 工具来发现代码中潜在的内存泄漏。

Instruments Tutorial for iOS: How To Debug Memory Leaks

答案 1 :(得分:0)

除非您使用ARC,否则这是一个简单的泄漏:

poly = [[MKPolygon alloc] init];
poly = [MKPolygon polygonWithCoordinates:points count:4];

我敢打赌,静态分析仪不喜欢这样,并告诉你究竟出了什么问题。