Ios 什么';didReceiveMemoryWarning和dealloc之间的关系是什么?
在内存压力下是否会调用Ios 什么';didReceiveMemoryWarning和dealloc之间的关系是什么?,ios,dealloc,didreceivememorywarning,Ios,Dealloc,Didreceivememorywarning,在内存压力下是否会调用dealloc?如果是真的,它是在direceivememorywarning之前还是之后调用的?另外,当释放视图控制器时,是否确定将调用dealloc 没有关系,didReceiveMemoryWarning让您有机会通过删除任何不需要的资源来应对内存不足的情况 如果视图控制器或任何其他对象被释放,并且其保留计数减少到0,则将删除它并调用其dealloc 如果对象已释放,但其保留计数未减少到0,则不会删除该对象,因此不会调用其dealloc 删除对象时调用dealloc,
dealloc
?如果是真的,它是在direceivememorywarning
之前还是之后调用的?另外,当释放视图控制器时,是否确定将调用dealloc
没有关系,didReceiveMemoryWarning让您有机会通过删除任何不需要的资源来应对内存不足的情况
如果视图控制器或任何其他对象被释放,并且其保留计数减少到0,则将删除它并调用其dealloc
如果对象已释放,但其保留计数未减少到0,则不会删除该对象,因此不会调用其dealloc
删除对象时调用dealloc,删除和释放不是一回事。对象的保留计数达到0时将被删除。didReceiveMemoryWarning只是通知您内存不足。视图和控制器均未释放。另一方面,在iOS 6之前,您可能会同时收到
viewDidUnload
,通知您视图已被删除(但视图控制器未被删除)。这就是为什么要覆盖direceivememorywarning
,以便您还可以释放视图控制器可以安全释放的任何其他内容。但是在这些内存不足的情况下,视图控制器永远不会释放。最坏的情况是,如果调用了viewDidUnload
,将释放视图,但不会释放控制器
仅供参考,我引用文件:
内存是iOS中的关键资源,视图控制器提供
内置支持在关键时刻减少内存占用
时代。UIViewController类提供了对
通过其didReceiveMemoryWarning
方法,内存不足,
释放不需要的内存
当出现内存不足警告时,UIViewController
class清除
它的视图,如果它知道可以重新加载或重新创建它们。如果
这种情况会发生,[如果运行6.0之前的iOS版本],它还会调用viewWillUnload
和viewDidUnload
方法,使您的代码有机会放弃任何
与视图层次结构关联的对象,包括
从nib文件加载的对象,在viewdiload中创建的对象
方法,以及在运行时延迟创建并添加到视图中的对象
等级制度
及
当系统确定
可用内存不足。此方法的默认实现
尝试释放视图控制器的视图[在6.0之前的iOS版本中]。即将发布的
视图不能有超级视图;也就是说,它不是视图的一部分
等级制度有关如何卸载视图的详细信息,请参见
您可以重写此方法以释放所使用的任何其他内存
您的视图控制器。如果您这样做了,那么您的实现就是这个方法
必须在某个时候调用超级实现以允许视图
控制器释放其视图。如果视图控制器保持不变
对视图层次结构中视图的引用,应释放这些引用
改为使用viewDidUnload
方法中的引用
更新:
在回答您的另一个问题时(您可能不关心,因为您已经意识到,当调用didReceiveMemoryWarning
时,视图控制器本身并没有被释放),是的,当项目最终被释放时(并且保留计数为零,即alloc和所有各种保留现在由相应的发布声明抵消),然后将调用dealoc
。顺便说一句,模拟器还可以让您模拟内存警告事件,这样您就可以准确地看到它的作用。只需在各种视图控制器方法(例如viewDidLoad、viewDidUnload、Dealoc、didReceiveMemoryWarning等)中放入NSLog语句或类似语句即可,您将确切地看到它在做什么。