关闭

黑马-OC语法-内存管理

199人阅读 评论(0) 收藏 举报

       定义

内存管理:基本类型数据int、char、float、double、struct、enum等是存在里)由操作系统自己释放,而OC对象由程序员自己释放,不释放的花程序结束时由系统释放(),内存使用由4个字节的引用计数器来控制,当计数器为0时,对象被回收,当使用allocnew来创建一个新对象时,新对象的引用计数器默认就是1。

僵尸对象:所占内存已经被回收的对象。(僵尸对象不能被再使用

野指针:指向僵尸对的指针(不可用内存),给野指针发送消息会报错。(错误信息EXC_BAD_ACCESS)。

空指针:没有指向任何东西的指针。(储存的东西是nil,null,0)给空指针发送消息不会报错(Java会报错)。

       注:程序闪退有可能是给释放的对象发送消息


retain : 当给对象发送一条retain消息,可以使引用计数器值+1。(retain方法会返回对象本身
release:当给对象发送一条release消息计数器-1.(没有返回值
retainCount:获得当前的计数器

dealloc方法:当一个对象要被回收的时候,就会调用。 重写方法时一定要调用[super dealloc],这句调用要放在最后面。对self(当前)所拥有的其他对象做 一次release

e.g.:

- (void)dealloc

[super dealloc];

  }

 dealloc原则:

 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作)
 2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release)

         set方法内存管理的代码规范:

 1.如果是基本数据类型直接赋值。

        2.如果是OC对象要先对就对象做一次release,给新对象retain。

e.g.:

 - (void)setCar:(Car *)car
 {
  1.先判断是不是新传进来对象
    if ( car != _car )
    {
    2.对旧对象做一次release
        [_car release];
 
   
 3.对新对象做一次retain
        _car = [car retain];
    }
  } 

  - (void)dealloc
 {
    [_car release];
 
          [super dealloc];
}
 

        


0
0

猜你在找
【套餐】Hadoop生态系统零基础入门
【套餐】嵌入式Linux C编程基础
【套餐】2017软考系统集成项目——任铄
【套餐】Android 5.x顶级视频课程——李宁
【套餐】深度学习入门视频课程——唐宇迪
【直播】广义线性模型及其应用——李科
【直播】从0到1 区块链的概念到实践
【直播】计算机视觉原理及实战——屈教授
【直播】机器学习之凸优化——马博士
【直播】机器学习&数据挖掘7周实训--韦玮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3635次
    • 积分:255
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档