内存管理

 

核心:

有alloc就有release

想用就retain


凡是使⽤了allocretain或者copy让内存的引用计数增加了,就需 要使⽤release或者autorelease让内存的引⽤计数减少。在一段代码

,增加和减少的次数要相等。


内存管理代码规范:

1.只要调用了alloc必须有relea

2.set方法的代码规范

     一.基本数据类型直接复制

   _age = age;

二.OC对象类型

-(void)setName:(NSString *)name
{

    //1.先判断是不是新对象

    if (_name != name) {

        [_name release];//2.对旧对象做一次release

       _name = [name retain];//3.对新对象retain

    }

}


3.dealloc方法的代码规范

  1. 一定要[super dealloc],而且放在最后;

  2. 对当前self所拥有的其他对象做一次release;


有交互就会产生自动释放池,使用便利构造器初始化会崩溃()



内存管理方式:

垃圾回收(gc)自动管理自动回收

MRC(manual reference count)人工引用计数:内存的开辟和释放都是有程序代码进行控制;

ARC(auto reference count )自动引用计数:iOS 5.0的编译器特性,它 允许⽤用户只开辟空间,不⽤用去释放空间。


引用计数

引用计数从1到0的时候,系统回收


copy方法的实现


retain不同,⼀个对象想要copy,⽣成自己的副本,需要实现 NSCopying协议,定义copy的细节(如何copy)。如果类没有接 受NSCopying协议⽽而给对象发送copy消息,会引起crash


-(id)copyWithZone:(NSZone *)zone
{
   
 //return  [self retain];//指针拷贝 只是+1,没有拷贝(浅拷贝)
   
 Student *stu5 = [[Student alloc] init];
   
 // Student *stu4 = [Student allocWithZone:zone];//对象拷贝考的是内存(深拷贝)
   
 // return stu4;
   
 return stu5;
   

}

  OC借助引⽤计数机制去管理内存,凡是使⽤了alloccopyretain等⽅方 法,增加了引用计数,就要使用releaseautorelease减少引用计数,引⽤ 计数为0的时候,对象所占的内存,被系统回收。



转载于:https://my.oschina.net/JKzhong/blog/492008

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值