MKOverlayView性能问题。什么也不做。但是很慢

时间:2012-03-05 14:59:47

标签: ios performance mkmapview mkoverlay

我在iPad上测试了以下代码。

如果我像下面的代码一样添加MyOverlay,即使在drawMapRect中什么也不做,MKMapView加载的默认地图图块会变慢。

如果我从MKMapView中删除MyOverlay,默认地图图块的加载会再次变快。

我想知道在调用drawMapRect时在后台做了什么。

或者以下代码对性能有任何问题?

[代码]

@implementation MyOverlay

-(id) init 
{
  self = [super init];

  boundingMapRect = MKMapRectWorld;
  boundingMapRect.origin.x += 1048600.0;
  boundingMapRect.origin.y += 1048600.0;

  coordinate = CLLocationCoordinate2DMake(0, 0);

  return self;
}

...
@end


@implementation MyOverlayView

- (id) initWithOverlay:(id<MKOverlay>)overlay
{
  self = [super initWithOverlay:overlay];

  ...  
  return self;
}

- (BOOL) canDrawMapRect:(MKMapRect) sm zoomScale:(MKZoomScale)zoomScale 
{
  return true;
}

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext: CGContextRef)context
{
  return; // do nothing, but map loading become slower 'much'.
}
@end

1 个答案:

答案 0 :(得分:0)

MKOverlayView的绘图方法drawMapRect:zoomScale:inContext:的名称让我想起了UIView的drawRect方法。 MKOverlayView是UIView的子类。 UIView的子类提供了这个警告:

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

如果这仍是一个问题,你应该看看这个关于drawRect的表现的问题:to drawRect or not to drawRect (when should one use drawRect/Core Graphics vs subviews/images and why?)