MKOverlayView 性能问题。啥也不做。但慢

Posted

技术标签:

【中文标题】MKOverlayView 性能问题。啥也不做。但慢【英文标题】:MKOverlayView Performance Issue. Doing nothing. But slowMKOverlayView 性能问题。什么也不做。但慢 【发布时间】:2012-03-05 14:59:47 【问题描述】:

我在 iPad 上使用以下代码进行了测试。

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

如果我从 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】:

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

*/

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

【讨论】:

以上是关于MKOverlayView 性能问题。啥也不做。但慢的主要内容,如果未能解决你的问题,请参考以下文章

ListBox 已设置数据源,但 Refresh 啥也不做

Select2 ajax 正确调用 web 服务,但之后啥也不做

为啥程序会汇编,但啥也不做?

PHP - 如果是这种情况,啥也不做

Bower 中的 Visual Studio 2015 还原包啥也不做

Mongo:如果文档不存在则创建,否则啥也不做