我有一个带有“会计磁带”的计算器应用程序,由UITextView
. 一旦磁带上有大约 50-100 行,文本视图的更新就会变得很慢——设置新内容(50-100 行文本)很容易花费 100 毫秒或更多时间。问题是我无法将此延迟移至后台,因为 UIKit 坚持在主线程上调用。
我能做些什么?想到的唯一一件事是使用UIView
更适合该任务的自定义子类重写磁带,但我并不是很想这样做,因为它需要做很多工作,而且UITextView
除了这个问题之外工作正常。
我有一个带有“会计磁带”的计算器应用程序,由UITextView
. 一旦磁带上有大约 50-100 行,文本视图的更新就会变得很慢——设置新内容(50-100 行文本)很容易花费 100 毫秒或更多时间。问题是我无法将此延迟移至后台,因为 UIKit 坚持在主线程上调用。
我能做些什么?想到的唯一一件事是使用UIView
更适合该任务的自定义子类重写磁带,但我并不是很想这样做,因为它需要做很多工作,而且UITextView
除了这个问题之外工作正常。
我很惊讶你在只处理 50 行时遇到问题,所以我坦率地想知道这里是否还有其他事情发生。我会通过 Instruments 中的“时间分析器”运行代码,并确认问题确实是更新UITextView
而不是其他问题。在放弃之前可能需要在这里进行一些研究UITextView
,
但是让我们假设您决定需要重新开始(我认为这不太可能)并且不使用UITextView
. 我可能会建议利用现有的控件,例如UITableView
在单元格之间没有分隔符的 a ,或者,如果最坏的情况发生在最坏的情况下,UIScrollView
磁带上的每一行都是 aUILabel
并且您UITableView
对滚动出屏幕的标签进行 - 样式的出列。一堆比从头开始更好的选择。
假设它真的UITextView
很慢而不是其他东西,我建议您将 textview 的文本更改为仅可见的那部分。所有滚动到外面的文本都不需要保存在 textview 中。当然,如果需要,您必须实现自己的滚动,或者对已删除的行使用空白行,以便滚动行为保持不变。