具有 UI 个对象的 NSArray(性能)
NSArray with UI objects (Performance)
我有一个 NSArray
(实际上是一个可变数组),每个索引中都有一个 UIWebView
对象。我使用此数组填充 UITableView
中的单元格。我使用 for
循环初始化数组中的每个对象,如下所示:
for (int i = 0; i < [self.events count]; i++) {
[self.uiWebViewArray addObject:[[UIWebView alloc] init]];
[[self.uiWebViewArray objectAtIndex:i] setUserInteractionEnabled:NO];
[[self.uiWebViewArray objectAtIndex:i] loadHTMLString:HTMLContent baseURL:nil];
}
此时我还没有填充 UITableViewCells
。
虽然它有效,但我认为这是一种糟糕的方法。当我增加单元格数量时,性能会下降。在某些时候,用户可能会注意到延迟。
我也尝试用 UIWebView
直接填充每个单元格,但基本上是一样的。
有没有人建议以有效的方式解决用 UIWebView
对象填充 UITableViewCell
的问题?
非常感谢任何帮助。
问题不在数组,是 webview 真的很慢而且内存很大。
如果你想用基本的 CSS 显示 HTML 文本并且你正在部署 >= iOS7,你应该使用 NSAttributeString
和那个方法:
NSDictionary *importParams = @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding) };
NSError *error = nil;
NSData *stringData = [HTML dataUsingEncoding:NSUTF8StringEncoding] ;
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:stringData options:importParams documentAttributes:NULL error:&error];
或者你可以使用第三方库DTCoreText就是其中之一。
我认为使用内部带有 Web View 的自定义单元格会更好。尽管 table 视图中的 Web 视图的整个概念很奇怪。
在 cellForRowAtIndexPath
中,您需要执行以下操作:
[cell.webView loadHTMLString:HTMLContent baseURL:nil];
TableView 的主要优点是在内存中创建的实际UITableViewCell 实例的数量远远少于逻辑cells/rows 的总数。实际上,在通常情况下 Table View 只创建填充框架所需的单元格,再加上一些额外的单元格。
因此,使用带有 Web 视图的自定义 table 视图单元是更好的内存方式,但正如我所说,整个想法有点奇怪。
我有一个 NSArray
(实际上是一个可变数组),每个索引中都有一个 UIWebView
对象。我使用此数组填充 UITableView
中的单元格。我使用 for
循环初始化数组中的每个对象,如下所示:
for (int i = 0; i < [self.events count]; i++) {
[self.uiWebViewArray addObject:[[UIWebView alloc] init]];
[[self.uiWebViewArray objectAtIndex:i] setUserInteractionEnabled:NO];
[[self.uiWebViewArray objectAtIndex:i] loadHTMLString:HTMLContent baseURL:nil];
}
此时我还没有填充 UITableViewCells
。
虽然它有效,但我认为这是一种糟糕的方法。当我增加单元格数量时,性能会下降。在某些时候,用户可能会注意到延迟。
我也尝试用 UIWebView
直接填充每个单元格,但基本上是一样的。
有没有人建议以有效的方式解决用 UIWebView
对象填充 UITableViewCell
的问题?
非常感谢任何帮助。
问题不在数组,是 webview 真的很慢而且内存很大。
如果你想用基本的 CSS 显示 HTML 文本并且你正在部署 >= iOS7,你应该使用 NSAttributeString
和那个方法:
NSDictionary *importParams = @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding) };
NSError *error = nil;
NSData *stringData = [HTML dataUsingEncoding:NSUTF8StringEncoding] ;
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:stringData options:importParams documentAttributes:NULL error:&error];
或者你可以使用第三方库DTCoreText就是其中之一。
我认为使用内部带有 Web View 的自定义单元格会更好。尽管 table 视图中的 Web 视图的整个概念很奇怪。
在 cellForRowAtIndexPath
中,您需要执行以下操作:
[cell.webView loadHTMLString:HTMLContent baseURL:nil];
TableView 的主要优点是在内存中创建的实际UITableViewCell 实例的数量远远少于逻辑cells/rows 的总数。实际上,在通常情况下 Table View 只创建填充框架所需的单元格,再加上一些额外的单元格。
因此,使用带有 Web 视图的自定义 table 视图单元是更好的内存方式,但正如我所说,整个想法有点奇怪。