iOS - 如何减少或释放绘制Unicode表情符号的内存占用?
iOS - How to reduce or release memory usage of drawing Unicode emoji?
关于以下代码:
@IBOutlet weak var textView: UITextView!
var counter: Int = 0
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
textView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: Selector("onTap:")))
}
func onTap(sender: UITextView) {
if counter % 2 == 0 {
textView.text = "\(UnicodeEmojiData.ALL_VALUES)"// (a)
counter = counter + 1
}
else {
textView.text = ""
counter = counter - 1
}
}
启动时
内存使用:7.35MB...(1)
UITextView 没有任何文本。
第一次点击
内存使用:18.13MB...(2)
UITextView 拥有所有 Unicode 表情符号。
第二次点击
内存使用:14.24MB...(3)
UITextView 没有任何文本。
问题
- 为什么内存使用不回到以前的使用? (如果 (a) 是普通的 ASCII 字符,则返回到以前的用法。)
- 我怎样才能恢复到以前的使用状态?
顺便说一下,emoji 好像是内部绘制成位图的。
我认为没有任何方法可以取消缓存字体(您正在尝试这样做)。这是由 Core Text 系统处理的,一旦不厌其烦地想出一个字符,它就喜欢抓住它。
如果这导致问题,您应该打开雷达 (bugreport.apple.com) 并报告它。
关于以下代码:
@IBOutlet weak var textView: UITextView!
var counter: Int = 0
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
textView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: Selector("onTap:")))
}
func onTap(sender: UITextView) {
if counter % 2 == 0 {
textView.text = "\(UnicodeEmojiData.ALL_VALUES)"// (a)
counter = counter + 1
}
else {
textView.text = ""
counter = counter - 1
}
}
启动时
内存使用:7.35MB...(1)
UITextView 没有任何文本。
第一次点击
内存使用:18.13MB...(2)
UITextView 拥有所有 Unicode 表情符号。
第二次点击
内存使用:14.24MB...(3)
UITextView 没有任何文本。
问题
- 为什么内存使用不回到以前的使用? (如果 (a) 是普通的 ASCII 字符,则返回到以前的用法。)
- 我怎样才能恢复到以前的使用状态?
顺便说一下,emoji 好像是内部绘制成位图的。
我认为没有任何方法可以取消缓存字体(您正在尝试这样做)。这是由 Core Text 系统处理的,一旦不厌其烦地想出一个字符,它就喜欢抓住它。
如果这导致问题,您应该打开雷达 (bugreport.apple.com) 并报告它。