0

我在我的应用程序中使用 arc。在我的应用程序中,我在 UIWebView 中播放了 YouTube 视频,视频 url 来自数据库,我将该 url 放在 UITableViewCell 中,我得到内存接收警告。我的数据库记录是 60。任何人都帮帮我。先感谢您

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:    (NSIndexPath *)indexPath
{
    NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d",indexPath.row];
    VideoCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell==nil)
    {
        cell =[[VideoCell alloc] initWithStyle:UITableViewCellStyleSubtitle     reuseIdentifier:CellIdentifier];
        cell.selectionStyle=UITableViewCellSelectionStyleNone;

        [cell.lblVid_Name setText:[[arr_Video     objectAtIndex:indexPath.row]valueForKey:@"Video_Name"]];
    [cell.lblVid_Desc setText:[[arr_Video objectAtIndex:indexPath.row]valueForKey:@"Video_Desc"]];

        NSString *url=[NSString stringWithFormat:@"%@",[[[arr_Video objectAtIndex:indexPath.row]valueForKey:@"Video_Link"]lastPathComponent]];

        NSString *youTubeVideoHTML =@"<html><head> <meta name = \"viewport\" content = \"initial-scale = 1.0, user-scalable = no, width = \"%f\"/></head> <body style=\"margin-top:0px;margin-left:0px\"> <iframe width= \"%f\" height=\"%f\" src = \"http://www.youtube.com/embed/%@?showinfo=0\"frameborder=\"0\" hd=\"1\" allowfullscreen/>></iframe></div></body></html>";
        NSString *html = [NSString stringWithFormat:youTubeVideoHTML,cell.webView_Video.frame.size.width,cell.webView_Video.frame.size.width, cell.webView_Video.frame.size.height,url];


        [cell.webView_Video loadHTMLString:html baseURL:nil];
        url=nil;
        youTubeVideoHTML=nil;
        html=nil;

}
return cell;

}

4

2 回答 2

4

所以创建了 60 个单元,每个单元都将加载一个视频 - 这不会占用大量内存吗?您不想显示可能的视频,然后仅在用户点击单元格时加载它们吗?然后一旦单元格在屏幕外发布视频?

于 2012-09-20T15:36:26.303 回答
3

您正在使用很多单元格而不是重复使用单元格:

NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d",indexPath.row];
VideoCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

这意味着您正在为每一行创建一个单元格!

您应该重复使用屏幕外的单元格,而不是再次创建一个新单元格

仅对所有单元格使用 CellIdentifier,然后管理该调用的数据(更改单元格的内部值)但重用旧单元格。

如果您在任何时候都只能在屏幕上看到 10 个单元格,那么您应该只分配/创建 10 个单元格对象,即使您的数组包含 60 个或更多对象,但您创建了 60 个单元格/对象!

于 2012-09-20T15:40:11.343 回答