zoukankan      html  css  js  c++  java
  • oc-30-堆栈

    /**
     操作引用计数器的方式:每个对象内部(对象的堆内存里面)都有一个引用计数器变量,表示对象被引用的次数。
     1:retainCount:获得对象的引用计数器的值
     2:retain:能够让对象的计数器值变量+1,要想计数器变量加1就要调用对象的retain方法
     3:release:让对象的计数器变量值 - 1,要想计数器变量减1就要调用对象的release方法
     
     怎么判断对象被释放?
     dealloc方法:只要调用了这个方法,就代表对象即将被释放.
     
     僵尸对象:已经被释放的对象,堆空间已经释放的对象。
     野指针:指向僵尸对象的指针
     空指针:指向nil的指针,给空指针发送消息(调用方法)不会报任何错误.
     内存泄露:程序结束了,堆对象内存没有释放。
     */
    #import <Foundation/Foundation.h>
    #import "Person.h"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            Person *p = [[Person alloc] init]; //1
            [p retain]; // 让对象引用计数器值 +1 // 2
            [p retain]; // 3
            [p release]; // 减-1 // 2
            [p release];
            [p release]; // 对象被释放
            NSLog(@"%lu",h.retainCount);//如果正常空间被回收这句话无法输出。
            p = nil; // 给空指针发送消息,不会报任何错误,后面调用方法也不会出错。
            [p release]; // p就是野指针,想要操作Person这个僵尸对象
            
    //
        }
        return 0;
    }
    
    
    
    //
    //Person.h
     #import <Foundation/Foundation.h>
     @interface Person : NSObject
     @end
     
    //Person.m
     #import "Person.h"
     @implementation Person
     - (void)dealloc
     {
     NSLog(@"人被释放啦不要再做其他的事来");
     // 必须调回父类的dealloc方法
     [super dealloc];
     }
     @end
  • 相关阅读:
    认知实习(杭钢、杭州中萃)
    Head of a Gang (map+邻接表+DFS)
    Sharing
    Hello World for U (20)
    计算器(delphi)
    CentOS 下 Codeblocks 的 安装 + 汉化 以及 基本使用介绍
    关于阿里如何吸引大学生用户理财的一些个人看法
    分页 存储过程
    点击退出,并未直接跳转到登陆界面,登录界面还停留在框架集界面
    梦幻之旅--地图编辑器开发
  • 原文地址:https://www.cnblogs.com/yaowen/p/5314461.html
Copyright © 2011-2022 走看看