具有 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 视图单元是更好的内存方式,但正如我所说,整个想法有点奇怪。