【问题标题】:how to call dealloc method如何调用dealloc方法
【发布时间】:2012-05-24 06:47:09
【问题描述】:

我是 iPhone 开发的新手。 我在按钮单击事件上调用了一个 viewController。但是当我回来时,我的-dealloc 方法没有被调用。这是我的按钮点击事件代码:

-(IBAction)btnAddPressed:(id)sender
{
    FriendsTableListViewController *viewController = [[FriendsTableListViewController alloc] initWithNibName:@"FriendsTableListViewController" bundle:nil];
    [self.navigationController pushViewController:viewController animated:YES];
    [viewController release];
}

这是我点击按钮后的 viewController 的 dealloc 方法:

-(void)dealloc{
    [super dealloc];
}

我不知道为什么 dealloc 方法不能正常工作。请帮我。谢谢你...

【问题讨论】:

  • Xcode 和 iOS 使用的是什么版本?
  • 你是调用delegate还是properties,你可能有一个属性保留了FriendsTableListViewController,你可能有一个属性仍然保留了FriendsTableListViewController的一个实例
  • 你怎么知道它没有被调用? FWIW,操作系统可以在您发布对象之后调用它。最好的办法是尽量避免使用-dealloc,而是使用ARC
  • 这里不会调用dealloc方法,只会调用viewwillAppear和viewDidAppear方法。它会在 viewDidUnLoad 方法被调用后被调用。全面了解视图生命周期
  • 对 dealloc 的调用仅由 iOS 在垃圾收集期间自行完成。它并不自动意味着仅在释放对象时才调用 dealloc。而且我不确定您所说的“dealloc 无法正常工作”是什么意思。另外,如果您在那里做的不多,为什么不删除整个方法并让超类处理释放?

标签: iphone


【解决方案1】:

navigationController 持有您的控制器(当您推送您的视图控制器时它将获得所有权),因此它不会被释放。

如果要移除视图控制器,请将其从导航控制器中弹出。

【讨论】:

  • 我问这个问题是因为我也试过这个:stackoverflow.com/questions/10713939/memory-management-on-back 但无法得到任何正确的答案...所以你能帮我吗,我会很感激...
  • 你试过我的方法了吗?正如@xlc0212 建议的那样,将您的项目转换为 ARC。
  • 对不起,我的朋友..我不能,因为我的老板告诉我,我们不会不惜一切代价向 ARC 隐瞒...现在告诉我该怎么办?
猜你喜欢
  • 2013-04-28
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
  • 2023-04-07
  • 2012-06-25
  • 2012-06-02
相关资源
最近更新 更多