0

这是我的第一篇文章,所以我希望格式没问题。

我得到这个泄漏“在线对象的潜在泄漏”,我无法弄清楚。也许我看得太难了,因此我看不到问题所在。有人可以帮我吗?

问题是: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

4 回答 4

1

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

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

所以而不是使用[[NSString alloc] initWithFormat...]

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

于 2012-08-17T17:51:05.737 回答
1

将代码替换为

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

appDelegate.imageText= [NSString stringWithFormat:@"%@",[[array objectAtIndex:indexPath.row] objectForKey:@"image"]];
于 2012-08-17T17:52:28.797 回答
0

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

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

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

于 2012-08-17T17:47:05.917 回答
0
appDelegate.imageText= [[NSString alloc]initWithFormat:@"%@",[[array objectAtIndex:indexPath.row]objectForKey:@"image"]];

您正在将分配的字符串分配给图像文本属性。属性分配应该是自动释放的字符串。imageText 应该是一个保留属性,因此保留分配给它的字符串的值。如果是保留,则您是双重保留,因此会泄漏对象。

于 2012-08-17T17:48:26.420 回答