将我的 iPad (mini) 更新到 iOS7 后,我体验到我的绘图应用程序在几次敲击后就会出现延迟和崩溃。
现在,当我在 xcode 5 中使用 Instruments/memory allocation tool 运行应用程序时,我看到VM:CG 栅格数据类别在屏幕上绘图时正在迅速填满。似乎有大量的CGDataProviderCreateWithCopyOfData调用,每个大小为 3.00Mb。连续绘图后,应用程序会收到内存警告,并且通常会终止。
该代码基本上将路径写入图像上下文,或多或少像这样:
UIGraphicsBeginImageContext(self.view.frame.size);
[drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
在 iOS7/iPad 上这非常滞后并且存在内存问题,而在 iOS6 上这相当快并且没有负内存占用。
当我在非视网膜 iPhone 版本中运行此代码时,CGDataProviderCreateWithCopyOfData调用大小为 604Kb,同时只有一两个“活动”。绘图流畅快速,没有记忆警告,也没有减速。
从 iOS6 到 iOS7,CoreGraphics 和 imagecontexts 发生了什么?
对于任何术语错误或其他可能的愚蠢错误,我们深表歉意。还是个菜鸟,业余时间做 iOS 开发。