友
我在仪器中运行我的代码,它在5行中显示内存泄漏(以下代码之外),即cell = [[[NSBundle mainBundle] loadNibNamed:@"ZoomCustomVideoCell" owner:self options:nil] objectAtIndex:0];
我不知道为什么它会显示内存泄漏以及相同的解决方案
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"ZoomCustomVideoCell";
ZoomCustomVideoCell *cell = (ZoomCustomVideoCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"ZoomCustomVideoCell" owner:self options:nil] objectAtIndex:0];
cell.m_zoomMsg = [[[ZoomMessage alloc] init] autorelease];
[[cell m_zoomMsg] initWithJSON:[m_tmpVideoList objectAtIndex: indexPath.row]];
[[cell videoLabel] setText:[cell.m_zoomMsg _from]];
[[cell m_labelLocation] setText:[NSString stringWithFormat:@"%@", cell.m_zoomMsg._location]];
[[cell videoLabelB] setText:[cell.m_zoomMsg _uploadDesc]];
NSLog(@"UserName: %@", [[cell videoLabel] text]);
[cell refreshImage];
}
return cell;
}
答案 0 :(得分:1)
loadNibNamed:owner:options:
方法将作为owner:
传递的参数作为nib的“文件所有者”。这意味着笔尖中的出口将连接到您作为所有者传递的任何内容。由于您将self
作为所有者传递,因此它将使用新加载的笔尖覆盖self
以前分配的任何商店。要建立出口连接,nib加载器在提供的所有者上使用setValue:forKey:
。如果您已将插座设置为具有正确内存管理的属性,则应该没有泄漏。如果你只将你的商店作为实例变量,那么(目前还不清楚,但我假设)对象会在设置时自动保留。
这里有两种解决方案:
为您的网点提供适当的内存管理,例如:如果它们尚未存在,请将它们转换为属性,并确保它们具有正确的内存管理属性。
为loadNibNamed:owner:options:
方法提供不同的所有者,该方法尚未建立任何商店,而您知道的商店将适当处理商店。
答案 1 :(得分:0)
此行导致内存泄漏:
cell = [[[NSBundle mainBundle] loadNibNamed:@"ZoomCustomVideoCell" owner:self options:nil] objectAtIndex:0];
将其更改为:
cell = [[[[NSBundle mainBundle] loadNibNamed:@"ZoomCustomVideoCell" owner:self options:nil] objectAtIndex:0] autorelease];