1

在我正在进行的项目中,我目前的开发阶段存在一个大问题。

我有一个 UIScrollView,它包含 50 个多行 UILabel,其中包含从 localizable.string 加载的动态内容。标签具有单独的格式(字体、粗体、斜体、颜色)。

问题是应用程序的实际内存使用量跃升至近 70MB(实时字节 3MB),这是不可接受的,按照我目前的概念,我必须使用 ~200 UILabel 才能实现我的目标。

我能做些什么 ?有没有办法延迟加载 UILabel 或重用它们?我应该使用 UITextView 还是 UIWebView ?

我怎样才能做到这一点 ?

谢谢。

4

2 回答 2

2

我建议使用https://github.com/AliSoftware/OHAttributedLabel或 UIWebView OHAttributedLabel 之类的东西,OHAttributedLabel 的内存占用应该比 WebView 小得多,但这取决于您实际需要多少 Web 视图。

如果你使用 UIWebView

如果您使用 IB 创建并连接插座,然后在您的 .m 中通过 loadHTMLString:baseURL 加载 html 格式的文本,您将在视图中绘制一个 Web 视图:

于 2012-09-25T23:58:17.157 回答
2

伙计们,在您的帮助下,我想出了这个非常有效的解决方案!

我正在使用一个带有标记的html“模板”文件和一个UIWebView。

基本上我正在做的是以下内容:

  1. 获取html文件路径。
  2. 使用 html 模板的内容创建一个字符串。
  3. 用我的字符串替换 html 中的标记(NSLocalized 字符串 - 大量文本)。
  4. 使用“loadHTMLString”加载到新创建的字符串的 WebView 内容中。

结果:从 70MB 的内存占用,现在我有 12MB 的内存占用(相当于约 20 个 A4 文本页)。

这是代码:

    NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"yourhtmlfile" ofType:@"html"];
NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
[_webView setBackgroundColor:[UIColor clearColor]];
    [_webView setOpaque:NO];

NSString *htmlBody = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF16StringEncoding error:nil];

htmlBody = [htmlBody stringByReplacingOccurrencesOfString:@"//marker_1//" withString:NSLocalizedString(@"localizedKey_1", nil)];
htmlBody = [htmlBody stringByReplacingOccurrencesOfString:@"//marker_2//" withString:NSLocalizedString(@"localizedKey_2", nil)];
htmlBody = [htmlBody stringByReplacingOccurrencesOfString:@"//marker_3//" withString:NSLocalizedString(@"localizedKey_3", nil)];

[self.webView loadHTMLString:htmlBody baseURL:baseURL];

现在我可以使用像文本格式这样的 html 好东西 :D !

我希望以上内容能帮助很多人:)!

谢谢大家的支持!

于 2012-09-26T13:31:27.927 回答