0

考虑使用此代码将新控制器推送到导航堆栈:

   AlphaColorController * a = [[AlphaColorController alloc] initWithColor:color name:name alpha:0.25];
  [[self navigationController] pushViewController:a animated:YES];
  [a release];

没有为 保留指针a。如果用户导航到这个新控制器,然后导航“后退”,然后再次“前进”,导航控制器是否足够聪明,可以知道该控制器已经存在,或者如果不存在,则再次分配它?如果控制器在多次推送之前已经实例化,那么首先测试(使用指针)有多大必要?

更新:换一种说法,每次用户导航到导航控制器的特定区域时,这段代码是否会有效地重新分配控制器?导航控制器每次都会重新创建并推送新创建的控制器?

4

2 回答 2

0

我认为您不了解您的代码是如何运行的。实际上,您正在创建您所说的新视图控制器对象,并且实际上是在将其推送到导航堆栈上。你是什​​么意思不保留指向它的指针?那个小星星不是白来的!

NavigationController 会保留对其导航堆栈的引用,直到视图从堆栈中弹出。在这种情况下,所述视图被释放和销毁。

于 2012-05-25T04:29:40.400 回答
0

当导航控制器推送视图控制器时,视图控制器的指针将被添加到导航控制器的堆栈中。所以保留计数器+1

导航控制器保留它推送的视图控制器的所有引用。

于 2012-05-25T04:30:36.130 回答