3

我对 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;
}
4

3 回答 3

1

从 Instrument's Leaks and Allocations 开始,看看是什么占用了您的内存。Triangle如果我不得不猜测,你可能在课堂上泄露了一些东西。

于 2011-06-17T16:36:10.047 回答
1

我遇到了几乎同样的问题。似乎该套件无法很好地处理多个叠加层。无论是 MKCircle、MKPolygon 还是自定义...

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

此问题的答案中描述了一种解决方法。不过它在 Apple 开发者论坛上:在这里获取...

这样,您将创建一个包含所有叠加层的叠加层。导致内存使用量大大减少。

于 2013-07-05T20:35:34.920 回答
0

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

这是一个示例,说明如何将其与循环一起使用以尽快摆脱自动释放的对象。

for (NSInteger i = 0; i < 99999999999999; i++ )
{
    NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc] init];
    NSString *string = [NSString string];
    // code
    [innerPool release];
}
于 2011-06-17T16:32:23.083 回答