【问题标题】:Memory management in Objective cObjective c 中的内存管理
【发布时间】:2011-04-15 06:12:28
【问题描述】:
  1. 我是 Objective c 和开发领域的新手,我想知道当我们退出应用程序时,操作系统会自动释放或完成我们在应用程序期间保留的资源,所以为什么我们需要这样做显式(在 obj c 中释放或自动释放)?

  2. 我的第二个问题是,当我在 dealloc 方法的 rootViewcontroller 类中释放应用程序委托类的对象时,我遇到了问题,然后当我再次进入控制器类时,我的程序崩溃了。

    -(void) viewDidLoad { TestAppDelegate * object = (TestAppDelegate *)[[UIApplication sharedApplication]delegate]; }

    -(void)dealloc {[对象释放]; [超级释放];}

【问题讨论】:

  • 上面的代码甚至无法编译,更不用说崩溃了——object-viewDidLoad 方法的本地,尝试在-dealloc 中使用它会导致编译错误。如果您需要真正的帮助,请发布真实代码。

标签: objective-c


【解决方案1】:
  1. 您应该释放或自动释放对象,以使所有对象都执行它们的 -()dealloc's。当进程完成时,操作系统会清除进程占用的所有内存,但它无法清除其他一些资源(互斥体、信号量,也许还有其他东西),因为它们是内核对象,可能被不同的进程使用。因此操作系统无法知道是否在初始过程完成时删除这些对象。开发者应该自己清除这些对象,这通常在适当对象的 dealloc 方法中完成。

  2. 不清楚何时发生崩溃。你能澄清一下吗?

【讨论】:

  • thanx 回答我,但我有一个困惑,当每个对象要销毁(使用释放或自动释放)然后它调用它dealloc 方法,所以你的意思是每个对象都有自己的dealoch方法???
  • 关于第二个问题,当我在 rootviewcontroller 中使用 appdelegate 对象时,我遇到了问题,然后我想离开 rootviewcontroller 的范围,但应用程序仍在运行,或者我仍然在应用程序范围内,然后我释放对象appdelegate 的原因是因为在 rootviewcontroller 中没有用,但是当我再次回到 rootviewcontroller 的范围内时它会崩溃,但我认为它不应该崩溃,因为它再次调用 rootviewcontroller 的 -(void)viewDidLoad 并且它应该再次重新分配 appDelegate 对象但是它不会发生。那你能解释一下吗?
猜你喜欢
  • 2011-06-28
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 2011-10-06
相关资源
最近更新 更多