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;
}

  

时间: 2024-07-28 22:22:56

OC 内存管理-02 autorelease 概念 以及用法的相关文章

OC 内存管理-02 ARC 内存管理

ARC 管理 概念: ARC简单,不用程序员在去管理内存 1.强指针 Strong[] :只要有强指针指向一个对象,那么系统就不会回收该对象 2.弱指针 weak :只要没有强指针指向对象,系统立即回收该对象 3.默认情况下,所有的指针都是强指针类型 4.创建出来就会立即被释放掉,应为没有强指针指向该对象

OC内存管理(一)

OC内存管理: 前言:为什么基本数据类型分配在栈区,而动态分配的内容在堆区. 因为基本数据类型的存放的数据在内存中得大小是固定的比如int类型的数据就是分配-2^31——2^31-1.而要分配不确定的数据在内存中得话,就动态分配到堆区. 一:基本原理 1>为什么要进行内存管理. 内存管理的范围是:继承自NSObjetc的类对象,对基本数据类型无效 我们知道手机的内存非常有限,而基本数据类型在编译时会静态分配内存在栈区,当代码块结束时,栈区的成员变量自动释放,当然指向对象的指针也会被释放.而对象是

OC内存管理

OC内存管理 一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等. 管理范围:任何继承NSObject的对象,对其他的基本数据类型无效. 本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指针也

OC内存管理相关整理

OC内存管理 一.基本原理 (一)为什么要进行内存管理.内存管理的目的是什么? 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等. 管理范围:任何继承NSObject的对象,对其他的基本数据类型无效 管理目的: 1.不要释放或者覆盖还在使用的内存,这会引起程序崩溃: 2.释放不再使用的内存,防止内存泄露.(ios程序的内存资源很是宝贵.) 本质原因是因

OC内存管理详解

前言 由于移动设备的内存有限,所以我们需要对内存进行严格的管理,以避免内存泄露造成资源浪费.在OC中,只有对象才属于内存管理范围,例如int.struce等基本数据类型不存在内存管理的概念.在iOS开发中,对内存的管理实际上就是对引用计数器的管理. OC内存管理的三种方式 自动垃圾收集(Automatic Garbage Collection): 手动引用计数器(Manual Reference Counting)和自动释放池: 自动引用计数器(Automatic Reference Count

OC内存管理总结,清晰明了!

<span style="font-size:18px;">OC内存管理 一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等. 管理范围:任何继承NSObject的对象,对其他的基本数据类型无效. 本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象

OC内存管理(转载)

OC内存管理 一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等. 管理范围:任何继承NSObject的对象,对其他的基本数据类型无效. 本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指针也

oc 内存管理小结(**输出才是最好的学习**)

引言 内存管理:清理(回收)不用的内存,以便内存能够再次利用. 这里就需要关注——怎样确定对象不再需要使用,并且其占用的内存可以被收回. 在Xcode4.2发布之前,oc内存管理全靠程序员自己,即手工管理内存计数. 在Xcode4.2版本之后,支持自动引用计数(Automatic Reference Counting,ARC),即摆脱手工管理,程序员从烦恼的内存管理问题中彻底解脱,oyeah~~ 但是,为了理解过去遗留的代码,还是需要了解手工管理内存的原理.并且,也可以帮助coder们更明智地决

OC 内存管理机制总结

OC 内存管理机制总结 一:OC内存管理机制目前分为两块,其一自动内存管理机制,其二手动内存管理机制: 1.首先我们从自动内存管理机制讲起: 1)什么是自动内存管理机制,自动内存管理机制就是程序中所创造的成员变量交由系统统一处理,不需要外部人员干预,有点像java中gc(垃圾回收机制). 2)之前是没有自动内存管理机制的,后期苹果想拓展自己的开发市场,吸引其他平台开发者入住ios开发阵营,其中收到内存管理是很发杂的一块,对于转入IOS开发者不利,因此苹果推出了自动内存管理机制. 2.接下来我们将