我在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;
}
答案 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];
}