当前位置:  开发笔记 > IOS > 正文

main.m真的是这个地方,主要运行循环的自动释放池是由每个事件创建的吗?

如何解决《main.m真的是这个地方,主要运行循环的自动释放池是由每个事件创建的吗?》经验,为你挑选了1个好方法。

不是.所有Cocoa或CocoaTouch类都需要存在自动释放池才能不泄漏内存.因此,需要现有的自动释放池来调用UIApplicationMain()以覆盖在UIApplicationMain()的上下文中实例化的任何(可能)自动释放的对象.正如您在UIApplicationMain返回后看到的那样,外部自动释放池就在应用程序退出之前.内部(记住自动释放池可以嵌套并且自动释放的对象被添加到最新/最深的池中)自动释放池在应用程序的运行循环的每次迭代开始时创建,并在迭代结束时释放.因此,运行循环获取的每次迭代都是"自己的"自动释放池.如果处理事件可能会产生大量自动释放的内存(在iPhone上是一个坏主意,但在OS X上很常见),您可能希望在事件处理代码中创建自己的内部自动释放池,这些代码可以在处理过程中释放事件.



1> Barry Wark..:

不是.所有Cocoa或CocoaTouch类都需要存在自动释放池才能不泄漏内存.因此,需要现有的自动释放池来调用UIApplicationMain()以覆盖在UIApplicationMain()的上下文中实例化的任何(可能)自动释放的对象.正如您在UIApplicationMain返回后看到的那样,外部自动释放池就在应用程序退出之前.内部(记住自动释放池可以嵌套并且自动释放的对象被添加到最新/最深的池中)自动释放池在应用程序的运行循环的每次迭代开始时创建,并在迭代结束时释放.因此,运行循环获取的每次迭代都是"自己的"自动释放池.如果处理事件可能会产生大量自动释放的内存(在iPhone上是一个坏主意,但在OS X上很常见),您可能希望在事件处理代码中创建自己的内部自动释放池,这些代码可以在处理过程中释放事件.


Barry,没有最外层的自动释放池不会导致正常意义上的泄漏,因为无论如何都会在main()返回时释放所有内存.但是,类可以在-dealloc中执行除释放内存之外的操作,例如完成写入文件或干净地关闭网络连接.
推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有