zoukankan      html  css  js  c++  java
  • OC 内存管理-02 autorelease 概念 以及用法

    (1)	@autoreleasepool { }//自动释放池代表,池子将要被销毁,对池子中所有的对象进行一次release操作
    (2)	不管你这个对象时在@autoreleasepool 之内创建的还是在之外创建的,只要你在池子中调用了autorelease那么这个对象就会被放入到池子中
    (3)	只有在自动释放池的作用域中调用对象的autorelease方法才能够正确的讲对象放入到池子中 
    (4)	如果在自动释放池中一个对象被多次释放[autorelease],那么会报野指针错误
    
    
    
    ----------------------------验证代码---------------------
    
    //
    //  main.m
    //
    
    //内存管理原则(配对原则):只要出现了new,alloc,retain方法,就要配对出现release,autorelease
    //对象存入到自动释放池中,当这个池子被销毁的时候他会对池子中所有的对象进行一次release操作
    //怎么把对象存到池子中
    #import <Foundation/Foundation.h>
    #import "Person.h"
    
    int main(int argc, const char * argv[])
    {
        /* 示例1
        //自动释放池
        //大括号代表池子的作用域
        @autoreleasepool
        {
            
         //release 功能 retaincount - 1
         //autorelease 好像功能也是 retaincount - 1 ?
            //1
            Person * p = [[Person alloc] init];
    //        [p release];//retainCount立即 -1
            [p autorelease]; //autorelease方法的作用只是将对象放入到池子中,然后返回一个self
            
            NSLog(@"asdfasdf");
            
         }//代表,池子将要被销毁,对池子中所有的对象进行一次release操作,[p release] 0
         */
        
        /*
        //autoreleasepool我么可以自己随意的创建
        
        // 示例2
        //1//不管你这个对象时在@autoreleasepool 之内创建的还是在之外创建的,只要你在池子中调用了autorelease那么这个对象就会被放入到池子中
        Person * p = [[Person alloc ] init];
        
        @autoreleasepool {
            
            [p autorelease];
            
        }//p 0
        */
        // 示例3
        /*
        //1 只有在自动释放池的作用域中调用对象的autorelease方法才能够正确的讲对象放入到池子中
        Person * p = [[Person alloc] init];
        [p autorelease];
        
        NSLog(@"aaaa");
        @autoreleasepool {
            
        }
        NSLog(@"bbb");
         */
        //示例4
        /*
        // 1
        Person *  p = [[Person alloc] init];
        
        @autoreleasepool {
            
            [p autorelease];//加入第一次
            
            [p autorelease];//加入第二次
            
            NSLog(@"abc");
        }//[p release]0 [p release]
        
         NSLog(@"cbd");
        */
        
        //示例5
        /*
        //1
        Person * p = [[Person alloc] init];
        
        @autoreleasepool {
            
            @autoreleasepool {
                
                [p autorelease];
            }//?[p release] 0
            
        }
        */
        
        
        Person * p = [[Person alloc] init];
        
        @autoreleasepool {
            
            [p autorelease];
            
            @autoreleasepool {
                
             
                [p autorelease];
            }//[p release] 0
            
            
        }//[p release];
        
        
        return 0;
    }
    

      

  • 相关阅读:
    margin 碰到过的重叠问题
    等宽字体延伸到的 ch 长度单位和动画 animation-timing-function
    三栏布局 左右固定 中间自适应
    左侧固定,右侧自适应的五种布局方式
    jmeter环境配置
    python3 + selenum 环境搭建
    win10系统安装loadrunner11提示“为了对电脑进行保护 已经阻止此应用”的解决方案
    关于loadrunner运行场景时提示“初始化失败,通信错误”的解决方案
    安装phpwind报错
    关于XAMPP Apache无法启动问题解决方案
  • 原文地址:https://www.cnblogs.com/hgj123/p/4108602.html
Copyright © 2011-2022 走看看