`
lizaochengwen
  • 浏览: 660046 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

didReceiveMemoryWarning

 
阅读更多
IPhone下每个app可用的内存是被限制的,如果一个app使用的内存超过20M,则系统会向该app发送Memory Warning消息。收到此消息后,app必须正确处理,否则可能出错或者出现内存泄露。

app收到Memory Warning后会调用:

UIApplication::didReceiveMemoryWarning -> UIApplicationDelegate::applicationDidReceiveMemoryWarning,然后调用当前所有的viewController进行处理。因此处理的主要工作是在viewController。

我们知道,创建viewcontroller时,执行顺序是loadview -> viewDidLoad。

当收到内存警告时,如果viewcontroller未显示(在后台),会执行didReceiveMemoryWarning -> viewDidUnLoad;如果viewcontroller当前正在显示(在前台),则只执行didReceiveMemoryWarning。
当重新显示该viewController时,执行过viewDidUnLoad的viewcontroller(即原来在后台)会重新调用loadview -> viewDidLoad。

因此主要注意下面几个函数:

loadView 创建view,构建界面;
viewDidLoad 做些初始化工作。由于在初次创建viewcontroller和重新恢复时都会调用,因此这个函数需要注意区分不同的情况,设置正确的状态。
didReceiveMemoryWarning 释放不必须的内存,比如缓存,未显示的view等。
viewDidUnLoad 最大程度的释放可以释放的内存。比如应该释放view,这些view在调用loadview后可以重新生成。(其中成员变量释放后应设置为nil)。对于非界面的数据是否释放,需要具体分析,可以恢复的数据可以释放,不能恢复的数据就不要释放。
实际中如果viewcontroller是用xib生成的界面,则需要我们做的就比较少,主要是在viewDidLoad中恢复原来的界面状态。

如果是通过编程创建的界面,则需要做的工作就要更多些,上面4个函数中都需要进行正确处理。

原文:http://blog.csdn.net/yy4040/article/details/7291385
分享到:
评论

相关推荐

    iOS调试工具AllYourMemoriesAreBelong2iOS.zip

    视图控制器在收到该通知的同时还会收到 didReceiveMemoryWarning 消息,并且应用的 AppDelegate 也会收到 applicationDidReceiveMemoryWarning: 消息。 在开发过程中,为了测试应用能否对 iOS 系统的内存警告通知...

    3D动画 iOS

    import UIKit import QuartzCore import SceneKit ... override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Release any cached data, images, etc that aren't in use. } }

    iOS面试题-总览

    当应用程序收到内存警告时,系统会调用`UIViewController`的`didReceiveMemoryWarning`方法。默认情况下,此方法会检查控制器是否可以安全地释放其视图(view),例如,如果视图没有父视图并且可以被轻松重建(如...

    iphone程序设计

    在`memoryManagement`方面,我们需要注意在`didReceiveMemoryWarning`和`dealloc`方法中释放不再使用的资源。当视图没有父视图时,`didReceiveMemoryWarning`会被调用来释放缓存数据。而在`dealloc`方法中,调用`...

    ios 多视图切换

    8. **内存警告和应用挂起**:除了`didReceiveMemoryWarning`,当接收到全局的内存警告时,所有视图控制器都应检查并释放资源。同时,应用挂起时(如进入后台),视图控制器需要保存状态以便恢复。 总的来说,iOS多...

    内存管理资料.zip

    9. **内存警告和 didReceiveMemoryWarning**:了解设备内存紧张时,系统如何触发内存警告,以及如何响应`didReceiveMemoryWarning`方法,对应用的健壮性至关重要。 通过学习和实践这些知识点,开发者可以编写出高效...

    iOS App开发中UIViewController类的使用教程

    10. `didReceiveMemoryWarning`:当应用收到内存警告时调用,可以在此释放非必需资源以减轻内存压力。 11. `dealloc`:当UIViewController实例被释放时调用,用于清理资源并释放内存。 在实际开发中,我们需要根据...

    AlertController的代码实现.pdf

    接着,实现 `-viewDidLoad` 和 `-didReceiveMemoryWarning` 方法,这两个方法是 UIViewController 的生命周期方法,用于初始化视图和管理内存。 接下来,我们将关注 UIAlertController 的两种基本样式:...

    远泓科技笔试题(obj_c)

    当系统内存紧张时,`didReceiveMemoryWarning`会被调用,提示视图控制器释放可释放的资源。默认操作是释放可以被重新创建的非内存关键资源。 9. 预处理指令`#define`声明常量: `#define YEAR_SEC (365*24*3600)`...

    百度笔试题整理

    - `didReceiveMemoryWarning`在程序收到内存警告时调用,系统建议在此方法中释放非必需资源。默认情况下,它会检查是否可以安全地释放controller的view,如果该view没有父视图且可以方便重建,则会释放。 4. **...

    IOS应用源码——RetainCount.rar

    7. **内存警告与 didReceiveMemoryWarning**:iOS设备内存有限,当系统内存不足时,会发送`UIApplicationDidReceiveMemoryWarningNotification`通知。这时,应用应该释放非必要的资源,减少内存占用。 8. **...

    IOS应用源码——视图控制器(无动画版).rar

    - `didReceiveMemoryWarning`方法会在系统警告视图控制器内存不足时调用,需在此清理非必需资源。 - `deinit`方法是视图控制器销毁前的最后一步,表明视图控制器将不再使用。 通过分析这个无动画版本的源码,...

    iPhone开发、ObjectiveC_面试题目

    19. `didReceiveMemoryWarning`在系统认为内存不足时调用,默认操作是释放可复用的非关键资源,自定义时,需要考虑哪些资源可以在不影响功能的前提下释放。 这些知识点涵盖了Objective-C内存管理、对象生命周期、...

    获取设备内存大小和剩余内存大小

    虽然它不能直接给出剩余内存的数值,但可以通过监听`didReceiveMemoryWarning`通知来监控内存警告。当系统内存不足时,会发送这个通知给所有应用。另外,`NSProcessInfo`的`physicalMemory`属性可以获取到设备的物理...

    ios经典面试题汇总

    具体到编程技术点,面试者应该了解ViewController的内存警告处理方式,即调用super的`didReceiveMemoryWarning`方法。对于事件的处理,应该理解什么时候使用delegation(代理模式)和什么时候使用Notification(通知...

    iOS笔试题.doc

    9. **UIViewController 的 didReceiveMemoryWarning 方法在系统资源紧张时会调用**。 - 当系统检测到内存较低时,会调用此方法通知视图控制器释放不必要的资源。 10. **MVC 模型中,M 是指 Model(模型),V 是指 ...

    获取iphone设备的硬件信息

    至于内存信息,可以监听`UIApplication.didReceiveMemoryWarning`通知来获取内存警告。 除了`UIDevice`,还可以通过其他方式获取更详细的硬件信息。例如,利用私有API(需注意App Store审核规则)或第三方库,可以...

    ios-定时器自动释放和观察者自动注销.zip

    通常在`deinit`方法中注销,或者在视图控制器的`viewWillDisappear`或`didReceiveMemoryWarning`等适当时机注销。 - **避免泄漏**:使用`removeObserver`方法时需提供正确的observer和name,确保正确移除。避免在类...

    iOS Objective C编码规范

    生命周期方法包括初始化(init)、销毁(dealloc)、视图加载(viewDidLoad)、视图出现(viewWillAppear)和内存警告处理(didReceiveMemoryWarning)。通过合理的组织,代码的可维护性和可读性得到提升。 2. 代码...

    UIViewcontoller的新方法测试_demo

    再者,`didReceiveMemoryWarning`方法在iOS 5.0中也得到了增强。当设备内存紧张时,系统会通知视图控制器释放可选的内存。开发者可以在此方法中进行适当的资源清理,以应对低内存警告。虽然这个方法在早期版本中就...

Global site tag (gtag.js) - Google Analytics