视图永远不会被释放

时间:2013-01-13 16:33:55

标签: iphone ios xcode automatic-ref-counting

问题:

我用nslog检查每个视图以检查视图是否被释放,detailViewController永远不会被释放,一段时间后我得到一个内存警告,唯一被调用的是ViewDidUnload。

如何调用视图以及将哪些项目推送到其中

视图被调用并推送到一个表中,在detailViewController中我有一个searchResult:

@property (nonatomic,weak) SearchResult *searchResult;

这是名为:

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

DetailViewController *controller = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:nil];

SearchResult *searchResult = [search.searchResults objectAtIndex:indexPath.row];
controller.searchResult = searchResult;
[self.navigationController pushViewController:controller animated:YES];

//made a property with (nonatomic,weak) DetailViewController and set it to the    controller
self.detailViewController = controller;
}

如何处理detailViewController

-(void)back:(UIButton *)sender{


[self.navigationController popViewControllerAnimated:YES];

}

我认为问题是

我只是猜测.. 我分配了一些在detailViewController中分配一些东西的函数但如果我回去那么这些东西会自动释放吗? 它必须是保留的东西,但我无法弄清楚在detailViewController中我在detailViewController中有这些私有属性的内容如下:

@property (nonatomic, retain) iCarousel *carousel;
@property (nonatomic, retain) UINavigationItem *navItem;

但如果我离开视图我怎么能释放这些对象?或者这不是问题?

更新:

当我推回时:

NSLog(@"%@", [self navigationController]);
[self.navigationController popViewControllerAnimated:NO];
NSLog(@"%@", [self navigationController]);

LOG:

2013-01-13 19:33:30.703 App[21683:707] <UINavigationController: 0xfeafbf0>
2013-01-13 19:33:30.705 App[21683:707] (null)

我正在使用ARC

2 个答案:

答案 0 :(得分:0)

您可能对detailViewController有一些强引用。

在didSelectRow方法中。您正在使用以下代码创建强大的参考:

self.detailViewController = controller;

弹出detailViewController或收到内存警告后,只需设置

即可
self.detailViewController = nil;

如果这不起作用,请检查您的其他代码,看看您是否正在创建任何其他强引用或保留循环,其中detailViewController可能具有对调用视图控制器的强引用。

祝你好运

答案 1 :(得分:0)

controller中存储self.detailViewController后,您必须释放控制器,因为它是在此方法中先前分配的。所以代码将成为

self.detailViewController = controller;
[controller release];