我在UITextView中遇到了似乎过多的内存使用情况。我正在将50Kb的ASCII文本文件加载到NSString中,并将其分配给应用中空UITextView组件的.text属性。这立即使我的内存占用量增加了100Mb(实际文本内容的2000倍)。
是否有一种方法(属性或转换)可以使UITextView的内存使用效率更高?我需要内容的可编辑性和滚动性,但是它是纯文本(未指定属性),并且我没有使用任何复杂的布局或富文本功能。
对于上下文:我在内存受限的环境(音频单元扩展)中工作,因此每Mb的内存都至关重要。
这似乎与记录良好的iOS11 UITextView内存泄漏无关,因为我没有发布该组件。
NSError* error = nil;
NSString* path = [[NSBundle mainBundle] pathForResource:@"Example" ofType:@"txt"];
NSString* content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
myUITextView.text = content; // this adds over 110Mb of memory usage for a 50Kb text file.
答案 0 :(得分:1)
OP完全正确!
我们发现,如果您添加到文本视图中,则在“ + =“的意义上,它将占用大量的内存。
我们有这样的文本视图
@IBOutlet var showValues: UITextView!
它会显示一些文本行(例如10至100行左右),每行只是一个整数。
所以我每次都非常简单地“附加”文本,就像这样:
latestValue: String = .. // something like "14.4 \n"
showValues.text += latestValue
如果您只是尝试这样做,则每行会增加大约1/2 mb !!!!!!!!!
也许这是iOS中的一个普通错误?
怎么可能?测试起来很容易!
答案 1 :(得分:0)
您的设计确实是错误的。一个UITextView中不应包含50kb的文本。您应该做的是将文本拆分成页面。因此,您有多个页面的UITextViews(可重用的Viewcontroller)。