zoukankan      html  css  js  c++  java
  • autorelease基本概念

    //

    //  main.m

    //  01-autorelease基本概念

    //

    //  Created by apple on 14-3-18.

    //  Copyright (c) 2014年 apple. All rights reserved.

    //

    //内存管理原则(配对原则):只要出现了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

        

            //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 {

            //存入多少次auto re le a se调用多少次re le a se

            [p autorelease];//加入第一次

            

            [p autorelease];//加入第二次

            

            NSLog(@"abc");

        }//[p release]0 [p release](第二次野指针操作)

        

         NSLog(@"cbd");

        */

        

        //示例5

        /*

        //1

        Person * p = [[Person alloc] init];

        

        @autoreleasepool {

            

            @autoreleasepool {

                //在哪个池子调用auto re le a se作用域就在哪个池子

                [p autorelease];

            }//[p release] 0

            

        }

        */

        

        

        Person * p = [[Person alloc] init];

        

        @autoreleasepool {

            

            [p autorelease];

            

            @autoreleasepool {

                

             

                [p autorelease];

            }//[p release] 0

            

            

        }//[p release];

        

        

        return 0;

    }

  • 相关阅读:
    Modern C++ Course [Lecture 3] {CMake, Google Test, Namespaces, Classes}
    Modern C++ Course [Lecture 2] {Compilation, Debugging, Functions, Header/Source, Libraries, CMake}
    Modern C++ Course [Lecture 0] {Course Introduction and Hello World} & [Lecture 1] {Variables, Basic Types, Control Structures}
    RASPBERRY PI LINUX LESSON: From 29th to Final Project
    RASPBERRY PI LINUX LESSON: From 16th to 28th
    RASPBERRY PI LINUX LESSON: From 1st to 15th
    vscode spring boot配置文件application.properties不提示解决方式
    JdbcTemplate增删改查
    Spring注解@ConfigurationPropertie
    [转载]Spring下IOC容器和DI(依赖注入) @Bean及@Autowired
  • 原文地址:https://www.cnblogs.com/supper-Ho/p/6168568.html
Copyright © 2011-2022 走看看