使用MapKit的叠加视图获取内存警告级别2

时间:2011-06-17 15:53:06

标签: ios objective-c mkmapview mkoverlay

我在iPhone上有关于内存警告的问题。我删除叠加并插入新的叠加。这种情况每5秒发生一次。但过了一会儿,就像半分钟一样,我得到了一个内存警告,我的应用程序崩溃了。

我能做什么,我的叠加的子视图是问题...
三角形将使用“drawRect”创建 我测试了它,没有三角形就没问题,应用运行稳定。

但只有当我将三角形添加到circleView时才会显示。

当三角形类为空时,存在同样的问题。

- (MKOverlayView *)mapView:(MKMapView *)map viewForOverlay:(id <MKOverlay>)overlay
{       
    MKOverlayView *overlayReturn = nil;

    if ([overlay isKindOfClass:[MKCircle class]] == YES) {
    MKCircleView *circleView = [[[MKCircleView alloc] initWithOverlay:overlay]autorelease] ; 

    circleView.strokeColor = [UIColor redColor]; 
    circleView.lineWidth = 1;
    circleView.fillColor = [[UIColor redColor] colorWithAlphaComponent:0.4];

   Triangle* triangle = [[Triangle alloc]initWithFrame:CGRectMake(circleView.circle.radius*10-1000, circleView.circle.radius*10-1000, 2000, 2000)];

    triangle.backgroundColor = [UIColor clearColor];
    [circleView addSubview:triangle];
    [triangle release];

    return circleView;
}

3 个答案:

答案 0 :(得分:1)

从乐器的泄漏和分配开始,看看是什么占用了你的记忆。如果我不得不猜测,你可能会在Triangle课程中泄漏一些内容。

答案 1 :(得分:1)

我遇到了几乎相同的问题。似乎套件似乎没有很好地处理多个覆盖层。无论是MKCircle,MKPolygon还是自定义......都无关紧要。

问题是viewForOverlay没有重用你的叠加层。因此,每次都要创建一个新的叠加AND三角形。

此问题的答案中描述了一种解决方法。但它在Apple Developer论坛上:得到它here ...

这样您就可以创建一个叠加层,其中包含所有叠加层。导致内存使用量减少。

答案 2 :(得分:0)

我不确定你是如何使用该方法的(在一个循环中,或者是什么),但是,如果可以的话,设置另一个NSAutoreleasepool来尽快释放这些对象。

以下是一个如何使用循环来尽快摆脱自动释放对象的示例。

for (NSInteger i = 0; i < 99999999999999; i++ )
{
    NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc] init];
    NSString *string = [NSString string];
    // code
    [innerPool release];
}