内存泄漏:在线分配的对象的潜在泄漏

时间:2012-08-17 17:43:31

标签: iphone objective-c

这是我的第一篇文章,所以我希望格式化正常。

我得到这个泄漏“物体在线泄漏”,我无法弄明白。也许我太难看了,所以我看不出问题。有人可以帮助我吗?

问题是:appDelegate.imageText

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    PListFirstAppDelegate *appDelegate = (PListFirstAppDelegate *)[[UIApplication sharedApplication]delegate];

    appDelegate.imageText= [[NSString alloc]initWithFormat:@"%@",[[array objectAtIndex:indexPath.row]objectForKey:@"image"]];

    //NSLog(@"%@", appDelegate.imageText);

    NavigationalDescription *detailViewController = [[NavigationalDescription alloc] initWithNibName:@"NavigationalDescription" bundle:nil];


     // Pass the selected object to the new view controller.

     [self.navigationController pushViewController:detailViewController animated:YES];
     [detailViewController release];

}

4 个答案:

答案 0 :(得分:1)

每次使用任何init方法实例化对象时,都必须在某处释放它,或者调用autorelease。

返回内容的类方法应始终自动释放。

所以不要使用[[NSString alloc] initWithFormat...]

改为[NSString stringWithFormat:@"%@", myString]

答案 1 :(得分:1)

替换

处的代码
 appDelegate.imageText= [[NSString alloc]initWithFormat:@"%@",[[array objectAtIndex:indexPath.row]objectForKey:@"image"]];

appDelegate.imageText= [NSString stringWithFormat:@"%@",[[array objectAtIndex:indexPath.row] objectForKey:@"image"]];

答案 2 :(得分:0)

您应该在该行的末尾添加自动释放调用。 iPad不会让我复制粘贴代码:(现在没有例子。

appDelegate.imageText= [[[NSString alloc]initWithFormat:@"%@",[[array objectAtIndex:indexPath.row]objectForKey:@"image"] ] autorelease];

您说要将对内存管理的控制权委托给imagetext实例。他们应该在需要时保留字符串。

答案 3 :(得分:0)

appDelegate.imageText= [[NSString alloc]initWithFormat:@"%@",[[array objectAtIndex:indexPath.row]objectForKey:@"image"]];

您正在为图像文本属性分配已分配的字符串。属性赋值应该是一个自动释放的字符串。 imageText应该是一个retain属性,因此保留了赋给它的字符串的值。如果保留,则双重保留,因此泄漏物体。