zoukankan      html  css  js  c++  java
  • oc55--ARC单个对象的内存管理

    //  Person.h
    
    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    
    @end
    //  Person.m
    
    #import "Person.h"
    
    @implementation Person
    
    - (void)dealloc
    {
        
        NSLog(@"%s", __func__);
    //    [super dealloc];      //ARC不准写
    }
    @end
    //
    //  main.m
    //  ARC基本概念
    //  不准许使用retain,release,dealloc里面不准许[super dealloc],编译器特性不是运行时特性,是xocde的功能,不是运行时跟你回收内存,而是xcode在编译的时候会跟你插入retain,release,是xcode帮你写了一些释放内存的代码。其他语言的垃圾回收机制是定时的去查看,没有使用就回收,ARC是写好了代码,执行代码,不是定时的去查看。完全消除了手动内存的管理。ios5之后默认就是ARC的。    插入代码之后就可以在手机上面运行了。
    
    #import <Foundation/Foundation.h>
    #import "Person.h"
    
    int main(int argc, const char * argv[]) {
    
        Person *p1 = [[[Person alloc] init] autorelease];   //报错,ARC不准写autorelease
         //默认情况下所有的指针都是强指针
        Person *p = [[Person alloc] init];
        [p retain]; //报错,ARC不准写retain
        [p release];  //报错,ARC不准写release
        
        
        {
            Person *p5 = [[Person alloc]init]; //大括号执行完,p5就销毁了,就没有强指针指向这个对象了,那么这个对象就销毁了
        }   //  [Person dealloc]
        
        
        {
            Person *p6 = [[Person alloc]init]; //
            p6 = nil;   // 只要没有强指针,对象就释放。单个对象内存管理:不使用就置位nil,
            //  [Person dealloc]
        }
        
    
        
        
        {
            // ARC判断对象是否释放,并不是判断引用计数。  ARC的判断准则: 只要没有强指针指向对象, 对象就会释放
            // 默认情况下所有的指针都是强指针
            Person *p = [[Person alloc] init];
            p = nil; //[Person dealloc]
            __strong Person *p1 = [[Person alloc] init];
    //        // 弱指针
            __weak Person *p2 = p1;
            p1 = nil; //[Person dealloc]
            // 在开发中, 千万不要使用一个弱指针保存一个刚刚创建的对象
            // 立即释放
            __weak Person *p3 = [[Person alloc] init];  //[Person dealloc]
        }
        
        return 0;
    }
  • 相关阅读:
    java两个栈实现一个队列&&两个队列实现一个栈
    Java HashSet和ArrayList的查找Contains()时间复杂度
    Java KMP算法代码
    利用集合求取字符串里每个字符的个数
    快速失败and安全失败
    Java 巴什博弈(取石子报数问题)
    [知识点][施工中] 1.1 部分IDE介绍
    [知识点] 4.4 动态规划进阶模型——树形/DAG/数位DP
    [知识点] 4.3 动态规划基础模型——区间DP/LIS/LCS
    [课堂小笔记] 数字电子技术
  • 原文地址:https://www.cnblogs.com/yaowen/p/7435261.html
Copyright © 2011-2022 走看看