Objective-C入门16:内存管理

Objective-C入门16:内存管理


每个对象有一个整数值,这个整数值与对象本身关联,称为引用计数器

当某些地方需要使用这个对象时,可以将引用计数器加1,表示需要使用这个对象

使用完毕之后,将该对象的引用计数器值减1,表示该对象使用完毕

如果引用计数器的值为0时,表明没有地方再使用该对象,这是系统将销毁该对象,其所占内存被收回,以便重用

        

ARC  自动管理引用计数的(系统默认,当前实际开发 全部是用的是ARC

MRC  手动管理引用计数的

        

怎么去操作引用计数

1、什么时候让引用计数1

allocnewcopyretain 引用计数1

        

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

[ XiaoMing retain ] ;

引用计数  是判断这个对象是否被消除的依据

使用 retain为了防止对象被销毁(引用计数为0的时候被销毁 )

      

NSLog(@"%ld" , XiaoMing.retainCount ) ;

        

release  使引用计数 -1

[XiaoMing release] ;

NSLog(@"%ld" , XiaoMing.retainCount ) ;


销毁对象的时候会调用 delloc

当引用计数为0的时候就会调用delloc

delloc 不可直接调用是系统自动调用的   


[XiaoMing release];

       

对象的引用计数为0(对象已经被销毁的时候)对象是一个野指针(没有指向任何东西的指针)

试用这个指针 再去调用方法 或者其他操作 会直接崩溃或者 存在潜在危险(数据为空)

如果对象的引用计数为0就不要强制给这个对象 retain

不用咱们管理引用计数的有

1.分配在栈里面的基本数据类型、

2.不是咱们allocnewcopyretain这些操作的

谁分配 谁负责 释放

       

autorelease  延迟释放

经常和自动释放池配合使用

NSAutoreleasePool  自动释放池的类

也需要对自动释放池实例化对象release

NSAutoreleasePool *pool = [[ NSAutoreleasePool alloc ]init];


当不知道 什么时候对象不再需要使用可以使用 autorelease延迟释放

放到自动释放池里面

Person *gaoShan = [ [ [ Person alloc ] init ] autorelease ] ;

在自动释放池 生命周期结束的时候会触发 autorelease释放延迟释放的对象

[ pool release ] ;

        

 新写法 @autoreleasepool的生命周期

出了花括号 自动释放池 结束 会触发 花括号 里面所有的 autorelease

  @autoreleasepool {

           Person * ppppp = [ [ [Person alloc ] init ]autorelease] ;

               } 





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

通过引用计数  来判断是否需要销毁这个对象

allocnewcopyretain引用计数+1

引用计数 -1 方法   release autorelease

[ yangXiuWang release ] ;

        

NSAutoreleasePool *pool = [ [ NSAutoreleasePool alloc ] init ] ;

写在自动释放池生命周期以内的 带有 延时 释放的对象 都会在 释放池 生命周期结束之后 释放

Person *huluwa1 = [ [ [ Person alloc ] init ] autorelease ] ;

Person *huluwa2 = [ [ [ Person alloc ] init ] autorelease ] ;

Person *huluwa3 = [ [ [ Person alloc ] init ] autorelease ] ;

[ pool release ] ;     

@autoreleasepool 

{

Person *huluwa2 = [ [ [ Person alloc ] init ] autorelease ] ;

}

花括号结束之后 就是新写法 自动释放池的生命周期 结束的时候


变量的生命周期

局部变量的生命周期 :定义的 位置 直到 定义存在的括号以内

        

全局变量的生命周期 :在对象存在的时候就可以使用

        

分配在栈里的数据 不用程序员去管理

 分配在堆里的 需要程序员去管理





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值