问题 目标C - 你在哪里解除全局静态变量?


或者,+(void)初始化的反义词是什么?

这是我的情况:

我有一个类Unit,其 - (id)initWithName:函数从全局NSDictionary获取数据,该数据是懒惰创建的,在Unit.m文件中定义为:

static NSMutableDictionary * unitLibrary = nil;

我在哪里打电话给[unitLibrary release]?


5498
2017-10-06 23:38


起源



答案:


您可以在不再需要字典的位置调用它。如果在应用程序的整个生命周期中都需要它,那么您不必执行任何操作,因为当应用程序终止时,操作系统将回收所有内存。


13
2017-10-06 23:50



这是在iPhone上,因此不会有任何内存泄漏。当用户点击主页按钮并退出应用程序时,我的整个堆都被取消分配? - abtree
是的,当他们到家时,你的整个地址空间都被处理掉了,包括你的堆。 - Louis Gerbarg
在拆除房屋之前无需进行春季清洁。终止应用程序足够快,而且速度更快。 - PeyloW


答案:


您可以在不再需要字典的位置调用它。如果在应用程序的整个生命周期中都需要它,那么您不必执行任何操作,因为当应用程序终止时,操作系统将回收所有内存。


13
2017-10-06 23:50



这是在iPhone上,因此不会有任何内存泄漏。当用户点击主页按钮并退出应用程序时,我的整个堆都被取消分配? - abtree
是的,当他们到家时,你的整个地址空间都被处理掉了,包括你的堆。 - Louis Gerbarg
在拆除房屋之前无需进行春季清洁。终止应用程序足够快,而且速度更快。 - PeyloW


没有通用的答案。当您确定不会再次使用时,您应该取消分配它。可能的候选人可能在 applicationWillTerminate 委托消息,或通过 atexit对() 功能。


3
2017-10-07 00:38



在应用程序终止时释放对象毫无意义 - 无论如何内存即将被释放。 - Chuck
是的,这很糟糕 - 只需让操作系统清理它。在这里工作毫无意义。你只是推迟了应用程序退出。 - Ken
减少泄漏检测工具产生的杂波量可能是有用的。但可能不值得努力。 - Mark Bessey