2012-10-23 65 views
2

我有一个UIView,我用手指画了一个UIBezierPath。 当我rezoom视图(比如一个路径绘制之后)再拉功能被触发,从而重新调整了BezierPath:空drawRect实现导致内存警告

- (void)redrawPathsWithScale:(float)scale 
{ 
    [_path applyTransform:CGAffineTransformMakeScale(scale, scale)]; 
    [self setNeedsDisplay]; 
} 

setNeedsDisplay导致drawRect到被调用。 现在,每次我放大到x6附近的某个绝对比例时,我立即收到内存警告,并且应用程序崩溃。

drawRect方法是这样的:

- (void)drawRect:(CGRect)rect 
{ 
    [_path strokeWithBlendMode:kCGBlendModeNormal alpha:1.0]; 
} 

好奇的是:未采取drawRect都删除内存警告。实施一个空的drawRect仍然会导致崩溃!

+0

您是否尝试追踪乐器中的分配以查看究竟是什么导致了内存增长? – Tobi

+0

好吧。实际上没有内存增长。这是一个很奇怪的问题。分配(活字节)始终保持在8MB左右,直到应用程序崩溃。看到我关于这个问题的其他问题:http://stackoverflow.com/questions/13028427/ipad-low-memory-warning-although-no-other-apps-are-running-and-my-app-allocate –

+0

我是在类似的事情上工作,我发现你调用draw rect的频率会触发内存警告和崩溃。例如,如果我每隔0.25秒调用一次drawRect,我的应用程序就会崩溃,但是如果每0.5秒调用一次,就没问题。奇怪的行为至少可以说。你是否使用计时器重绘? –

回答

1

添加[super drawRect:rect];有什么区别吗?

的drawRect中的苹果文档状态:

如果直接继承UIView的,你的这种方法的实现并不需要调用超。但是,如果您要继承不同的视图类,则应在实现中的某个位置调用super。

如果你是UIView的子类,你应该没问题,但它可能值得检查,以防万一。

+0

Im直接对UIView进行子类化。不过,我试图在drawRect的开头调用super方法。没有改变。 –

+0

这给我修好了。我没有超级drawRect继承UIControl。谢谢! – Jon