由于内存错误,我的应用程序不断崩溃,我无法弄清楚原因。仪器工具告诉我内存增加到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,如果我尝试自动发布任何内容,它会给我带来错误。
答案 0 :(得分:0)
代码中唯一可疑的部分可能是MKPolygon
poly
。您在哪里声明它的代码?
您还可以尝试运行 Leaks
工具来发现代码中潜在的内存泄漏。
答案 1 :(得分:0)
除非您使用ARC,否则这是一个简单的泄漏:
poly = [[MKPolygon alloc] init];
poly = [MKPolygon polygonWithCoordinates:points count:4];
我敢打赌,静态分析仪不喜欢这样,并告诉你究竟出了什么问题。