如何在iphone中自动引用计数中处理内存警告?

时间:2012-09-20 15:04:53

标签: iphone uitableview uiwebview

我在我的应用程序中使用arc。在我的应用程序中,我在UIWebView中播放了YouTube视频,视频网址来自数据库,我把这个网址放在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;

}

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

你正在使用大量细胞,而不是重复使用细胞:

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

这意味着你要为每一行创建一个单元格!

你应该重复使用不在屏幕上的单元格,而不是重新创建新单元格

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

如果你可以随时在屏幕上看到10个单元格,你应该只分配/创建10个单元格对象,即使你的数组​​包含60个或更多对象,但是你创建了60个单元格/对象!