zoukankan      html  css  js  c++  java
  • 关于ViewDidUnload

    在iOS4和iOS5系统中,当内存不足,应用收到Memory warning时,系统会自动调用当前没在界面上的ViewController的viewDidUnload方法。

    在iOS6中,viewDidUnload回调方法被Deprecated掉了, 将回收内存的相关操作移到didReceiveMemoryWarning 中.

    iOS6不推荐你在didReceiveMemoryWarning中将view置为nil。

    原因:

    1. CALayer是一个bitmap图象的容器类,当UIView调用自身的drawRect时,CALayer才会创建这个bitmap图象类。

    2. 具体占内存的其实是一个bitmap图象类,CALayer只占48bytes, UIView只占96bytes。而一个iPad的全屏UIView的bitmap类会占到12M的大小!

    3. 在iOS6中,当系统发出MemoryWarning时,系统会自动回收bitmap类。但是不回收UIView和CALayer类。这样即回收了大部分内存,又能在需要bitmap类时,通过调用UIView的drawRect: 方法重建。

    iOS6系统做的内存优化:

    1. 当一段内存被分配时,它会被标记成“In use“, 以防止被重复使用。当内存被释放时,这段内存会被标记成”Not in use”,这样,在有新的内存申请时,这块内存就可能被分配给其它变量。

    2. CALayer包括的具体的bitmap内容的私有成员变量类型为CABackingStore, 当收到MemroyWarning时, CABackingStore类型的内存区会被标记成volatile类型,表示这块内存可能会再次被原变量重用。

        这样,当收到Memoy Warning时,虽然所有的CALayer所包含的bitmap内存都被标记成volatile了,但是只要这块内存没有再次被复用,那么当需要重建bitmap内存时,它就可以直接被复用,而避 免了再次调用 UIView的 drawRect: 方法。

    转自:http://www.it165.net/pro/html/201305/5834.html

  • 相关阅读:
    QT之sqlite连接
    QT之QCustomPlot(二)
    QT之QCustomPlot(一)
    Qt第三方库QCustomPlot——QCustomPlot解读
    C++ 头文件系列(sstream)
    C++ 头文件系列(streambuf)
    C++ 头文件系列(iostream)
    C++ 头文件系列(ostream)
    C++ 头文件系列(istream)
    C++ 头文件系列(ios)
  • 原文地址:https://www.cnblogs.com/417460188dy/p/3227668.html
Copyright © 2011-2022 走看看