将大量动态格式化文本添加到iOS App

时间:2012-09-25 23:34:59

标签: ios xcode uiwebview uilabel uitextview

对于我正在开展的项目,我目前的开发阶段存在很大问题。

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

问题在于App的实际内存使用率跃升至近70MB(实时字节为3MB),这是不可接受的,根据我目前的概念,我必须使用~200 UILabel才能实现我的目标。

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

我该怎么做?

感谢。

2 个答案:

答案 0 :(得分:2)

我建议使用类似https://github.com/AliSoftware/OHAttributedLabel或UIWebView的东西OHAttributedLabel应该比WebView具有更小的内存占用量但是它取决于您实际需要多少Web视图。

如果您使用UIWebView

如果您正在使用IB创建和连接插座,然后在.m中将html格式的文本加载到loadHTMLString:baseURL:

,您将在视图中绘制一个Web视图

答案 1 :(得分:2)

好的家伙在你的帮助下,我想出了这个非凡的解决方案!

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

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

  1. 获取html文件路径。
  2. 使用html模板的内容创建一个字符串。
  3. 用我的字符串替换html中的标记(NSLocalized字符串 - 大量文本)。
  4. 使用“loadHTMLString”加载到新创建的字符串的WebView内容中。
  5. 结果:从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!

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

    谢谢你们的支持!