【发布时间】:2019-06-11 18:58:18
【问题描述】:
我在 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.
【问题讨论】:
-
我使用包含随机文本的
190KB文件对IOS 12进行了测试,但我没有超过50MB 标记。你确定+[NSStringWithContentsOfFile:encoding:error]没有被多次调用吗?此外,目前尚不清楚您使用的是哪个版本 - 您使用的是 iOS 11 还是 12? -
文本加载不是问题:在调试器中,我可以看到内存需求不会增长,直到将 NSString 分配给 UITextView。我也可以用相同的结果“生成”字符串(而不是加载它)。这是在 iOS12 上。
-
这个十年前的 iOS 问题在某些情况下似乎仍然存在!
标签: ios objective-c uikit