iPhone - 改善磁盘瓶颈

时间:2010-12-05 03:06:20

标签: iphone

我正在设计这个应用程序,并且有一个允许用户用手指绘制的部分。当我为操作提供撤消时,当用户开始绘图时,我必须快速抓取当前绘图内容并将其存储在某处。

我首先尝试将撤消存储为CGLayer并将其作为图像存储,但我的应用内存使用量从7增加到19 Mb。使用19 MB我相对安全,因为24 Mb似乎是超出事物开始变得危险的理论极限。问题是我的应用程序的另一部分需要大量内存,如果我运行它,内存峰值从19到28 Mb,这太冒险了。

然后我决定将图像保存在磁盘上。为了防止当用户触发TouchesBegan时我必须保存图像时出现的小差距,我提炼到了理智的极限,保存到磁盘方法,现在我几乎感觉不到任何差距。我说,我几乎感觉不到,但我仍然觉得有一点毛发间隙,我会说< 0.1s开始画线。

我所做的是触发队列操作来管理文件保存。

你们有什么其他方法可以想象如何改进它?

感谢

3 个答案:

答案 0 :(得分:3)

我建议将图像存储为矢量数据,这样您就可以非常快速地播放和撤消,并将所用内存除以千倍。例如,您只能存储:

  • 手势坐标(x,y)
  • 手势类型(touchBegan,touchEnded)
  • 笔的变化(颜色,宽度,效果)

您还有一个用于渲染当前图像的画布。

祝你好运!

答案 1 :(得分:3)

使用mmapCGBitmapContextCreate创建由文件支持的图像;内核将根据需要懒惰地进出文件的部分内容。

将此与rjobidon的建议结合起来,每隔一段时间快照一次,你应该有一个强大而快速的撤销系统。

答案 2 :(得分:1)

如何在上一次操作结束时进行存储?然后每个笔画的开始都是即时的。

您甚至可以在计时器上执行此操作,因此如果您暂停绘图几秒钟,它只会保存撤消,这意味着撤消会将它们带回到绘图的上一个阶段,而不仅仅是之前的笔划,可能是可取的。