问题:
我用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
答案 0 :(得分:0)
您可能对detailViewController有一些强引用。
在didSelectRow方法中。您正在使用以下代码创建强大的参考:
self.detailViewController = controller;
弹出detailViewController或收到内存警告后,只需设置
即可self.detailViewController = nil;
如果这不起作用,请检查您的其他代码,看看您是否正在创建任何其他强引用或保留循环,其中detailViewController可能具有对调用视图控制器的强引用。
祝你好运答案 1 :(得分:0)
在controller
中存储self.detailViewController
后,您必须释放控制器,因为它是在此方法中先前分配的。所以代码将成为
self.detailViewController = controller;
[controller release];