当应用程序收到内存不足警告消息时,可能会发生 3 种情况:
- 您的应用刚刚启动,用户没有做任何特别的事情
- 应用程序正在运行并且存在当前上下文
- 该应用程序在后台运行一些上下文
因此,当您收到此消息时,您应该释放内存...但是在哪里?如何 ?
我明白那个 :
initWith
.....必须设置默认的静态值。viewDidLoad
必须加载任何非静态对象didReceiveMemoryWarning
必须释放那些非静态对象- 我看不出在
viewDidUnload
...中可以/必须做什么
我猜某些保留值必须在某处设置为零……在 didReceiveMemoryWarning 中?
并且必须对活动上下文(屏幕的位置,显示的文本,...)做些什么,所以当再次调用 viewDidLoad 时,这些东西会再次出现在 memoryWarning 调用之前的位置?
我的意思是,想象两种情况:
方案 1
- 你正在做某事……你在一个字段中写了一些文本,没有保存它,打开另一个视图,在屏幕上移动了一个视图。
- 您在后台发送应用程序。
- 然后将 memoryWarning 发送到应用程序。
- 之后,用户将应用程序发送到前台:它应该显示他们在退出时的内容,在当前视图上和以前的视图上一样,但是如果所有内容都已发布,你该怎么做?
方案 2
- 你正在做某事……你在一个字段中写了一些文本,没有保存它,打开另一个视图,在屏幕上移动了一个视图。
- 然后将 memoryWarning 发送到应用程序。
- 您不想丢失视图中的内容,也不想丢失先前视图中的内容。您不希望屏幕因为释放/重新加载功能而闪烁。你怎么处理这个?
那么当这些内存警告发生时,除了将内容写入磁盘以稍后显示它们之外,您还有其他选择吗?
你什么时候再加载这些?我有一个加载(viewDidLoad)的viewController,接收一个memoryWarning,卸载(viewDidUnload),但是当回到它时,不会再次调用viewDidLoad?这必须在 viewWillAppear 中完成吗?我是否必须认为每当 viewWillAppear 被触发时,我可以假设应该在其上显示的内容已加载?
任何帮助,即使是有价值的链接,都会很棒!
谢谢您的帮助。