我在我的应用程序中使用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;
}
答案 0 :(得分:4)
因此创建了60个单元格,每个单元格都会加载一个视频 - 这不会占用大量内存吗?你不想显示可能的视频,然后只在用户点击一个单元格时加载它们吗?然后一旦单元格在屏幕外发布视频?
答案 1 :(得分:3)
你正在使用大量细胞,而不是重复使用细胞:
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d",indexPath.row];
VideoCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
这意味着你要为每一行创建一个单元格!
你应该重复使用不在屏幕上的单元格,而不是重新创建新单元格
只为所有单元格使用CellIdentifier,然后管理该调用的数据(更改单元格的内部值),但重用旧单元格。
如果你可以随时在屏幕上看到10个单元格,你应该只分配/创建10个单元格对象,即使你的数组包含60个或更多对象,但是你创建了60个单元格/对象!