对于我正在开展的项目,我目前的开发阶段存在很大问题。
我有一个UIScrollView,它包含50个多行UILabel,其中包含从localizable.string加载的动态内容。标签是单独格式化的(字体,粗体,斜体,颜色)。
问题在于App的实际内存使用率跃升至近70MB(实时字节为3MB),这是不可接受的,根据我目前的概念,我必须使用~200 UILabel才能实现我的目标。
我该怎么办?有没有办法延迟加载UILabel或重用它们?我应该使用UITextView还是UIWebView?
我该怎么做?
感谢。
答案 0 :(得分:2)
我建议使用类似https://github.com/AliSoftware/OHAttributedLabel或UIWebView的东西OHAttributedLabel应该比WebView具有更小的内存占用量但是它取决于您实际需要多少Web视图。
如果您使用UIWebView
如果您正在使用IB创建和连接插座,然后在.m中将html格式的文本加载到loadHTMLString:baseURL:
,您将在视图中绘制一个Web视图答案 1 :(得分:2)
好的家伙在你的帮助下,我想出了这个非凡的解决方案!
我正在使用带有标记的html“模板”文件和UIWebView。
基本上我正在做的是以下内容:
结果:从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!
我希望以上内容能帮助很多人:)!
谢谢你们的支持!