1

在一个基于聊天的应用程序中,我有UITableView一个显示所有朋友姓名的应用程序,didSelectRowAtIndex我正在推动chatViewController使用navigationcontroller push方法。

我有两个困惑:

1>当我推动时,chatViewController我会这样做

 chatViewController *cVc = [[chatViewController alloc]initWithFriendName:@"the name" andId:@"the id"];

可以有 10 个或 50 个或 100 个朋友,alloc init每个朋友都呼唤是否正确?

2> 当用户点击返回按钮返回好友列表chatViewController's时,当前实例将被销毁以释放内存时会发生什么情况?

4

2 回答 2

2
  1. 是的,如果这个实例chatViewController是针对这个特定的朋友的。

  2. 后退按钮执行隐式操作,从导航堆栈popViewControllerAnimated:中弹出chatViewController并销毁它(除非您在某处保存了对该视图控制器的强引用)。

所以一次只会有一个实例(在用户返回表格视图时chatViewController创建 didSelectRowAtIndex并销毁)。popViewControllerAnimated:

于 2013-05-02T07:50:32.467 回答
0

由于您正在创建 chatViewController 的全局实例并在每次调用 didSelectRowAtIndexpath: 方法时分配它,这是错误的方法,因为它会不必要地利用内存,从而降低应用程序的性能。您必须在方法 didSelectRowAtIndexpath 中创建本地实例:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     ChatViewController *_cvc = [[ChatViewController alloc] initWithFriendName:@"the name" andId:@"the id"];

     [self.navigationController pushViewController:_cvc animated:YES];
}

第二个问题的答案是每当用户按下后退按钮时,实例就会被销毁

于 2013-05-02T07:54:14.047 回答