zoukankan      html  css  js  c++  java
  • Dealloc的调用时机

    内存释放是iphone开发过程中比较重的地方,所以在开辟内存后,我们必须小心、谨慎、并且及时的释放掉。

    内存的释放,可以调用Dealloc函数,该函数可以释放,该类对象所占用的内存空间,为iphone节省宝贵的内存资源。

    那么Dealloc函数是什么时候释放的哪?

    以前网络上说是当 对象的引用计数 为0的时候,就可以调用iphone的垃圾回收机制,然后释放该资源,但是一直没有真正的测试过,今天在编写游戏代码的过程看到了测试结果,确实是这个样子的。

    测试代码如下:

    我们先创建一个类:test_1,修改他的Dealloc函数

    - (void)dealloc 

    {

      NSLog(@"this is test_1 view did dealloc !");//输出内容,表示调用该函数,并释放资源

          [super dealloc]; 

    }

    我们在另一个地方创建他

    test_1 *m_text;

    if (m_text==nil)

    {

      m_text = [[test_1 alloc] initWithNibName:nil bundle:nil];

    }

    int a = [m_text retainCount];//a = 1

    [m_text retain];

    int b = [m_text retainCount];//b = 2

    [m_text release];

    int c = [m_text retainCount];//c = 1

    [m_text release];

    int d= [m_text retainCount];//d = 1

    m_text = nil;

    int e= [m_text retainCount];//e = 0

    经过测试发现,其实int d= [m_text retainCount];//d = 1该行代码中 d的理论之应该=0,表示该对象已经为空,其所占用的内存资源已经得到释放, 也就是执行到改行代码后,调用了函数

    - (void)dealloc 

    {

      NSLog(@"this is test_1 view did dealloc !");//输出内容,表示调用该函数,并释放资源

          [super dealloc]; 

    }

    输出:

    2011-10-25 16:05:13.333 Untitled[6358:207] test view did dealloc !

    表示,对象m_text所占据的内存空间已经完全得到释放。

    通过测试我们也发现,当一个对象的RetainCount函数=0的时候,系统会马上调用Dealloc函数释放该资源。


    要想完全释放一个对象,的参考代码:

    [m_text release];

    m_text = nil;



    THE END !







  • 相关阅读:
    protobuf 协议 windows 下 C++ 环境搭建
    protobuf 协议 windows 下 java 环境搭建
    ProtocolBuffers (二) android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】
    C++ ofstream和ifstream详细用法
    C# 关于out和ref的问题
    java 解析office文件 大全
    Ezhuang
    IOS
    Android Client and PHP Server
    一个IM开源项目LiteTalk
  • 原文地址:https://www.cnblogs.com/xingchen/p/2224133.html
Copyright © 2011-2022 走看看