美文网首页教育程序员@IT·互联网
内存管理 - 引用计数器

内存管理 - 引用计数器

作者: Mr_HeH | 来源:发表于2017-04-15 16:49 被阅读41次

一、 retain、release、retainCount的使用

1. 举(Person)栗子来说吧
    //1.alloc之后引用计数为1
    Person *p = [[Person alloc]init];
    NSLog(@"--%ld",[p retainCount]); // 1
    //2.release之后为0.同时调用Person的dealloc方法
    [p release];


2. 过度释放(多次使用release)
例:
   Person *p = [[Person alloc]init];
    //alloc之后引用计数为1
    NSLog(@"--%ld",[p retainCount]);
    //release之后为0.同时调用Person的dealloc方法
    [p release];// 这一步结束会调用dealloc方法
    //又release会出现啥情况呢?
    [p release];
oh,多写了一个release报错了。从报错原因(EXC_BAD_ACCESS),就知道这是报野指针错误。为啥会出现这个错误呢,来简单分析哈哈。

我们可以知道,在引用计数器为0的时候,对象就会被销毁掉。因此p指针指向的对象已经不能用了,所以报这个错。此时这个p指针也就成了野指针。

那么如何解决野指针错误呢?

就是在引用计时器为0,即Person对象被销毁之后,就让p指针置空。

  Person *p = [[Person alloc]init];
    //alloc之后引用计数为1
    NSLog(@"--%ld",[p retainCount]);
    //release之后为0.同时调用Person的dealloc方法
    [p release];
  //赋值为nil
    p = nil;
    [p release];//此时这句执行也不会报错了,oc中不存在空指针错误,即给空指针发送消息也不会报错

总结: 给僵尸对象不能发送消息,也不能起死回生,即不能在给僵尸对象发送retain消息

相关文章

  • MRC模式下的内存管理机制

    OC的内存管理机制是什么?答:内存管理的机制: 每个对象都有自己的引用计数器 在MRC内存管理模式下,引用计数器计...

  • 09-04、ARC的基本概念:依据是否有强指针指向

    MRC中内存管理依据的是对象的引用计数器retaincount,引用计数器为0就会被释放。ARC中内存管理准则依据...

  • 面试篇(一):内存管理你都知道哪些?

    引用计数器 在ObjC中内存的管理是依赖对象引用计数器来进行的,ObjC中内存的管理在ObjC中每个对象内部都有一...

  • Effective Objective-C 2.0笔记(四)

    第五章 内存管理 第29条:理解引用计数 OC使用引用计数管理内存,引用计数机制通过递增递减的计数器来管理内存。对...

  • iOS开发--内存管理及Block

    内存管理简介 引用计数器 1.什么是引用计数器 系统是如何判断什么时候需要回收一个对象所占用的内存?根据对象的引用...

  • iOS经典面试题 -内存管理

    内存管理了解么?讲一下内存管理。 1、机制 OC采用引用计数器的方式对内存进行管理,当一个对象的引用计数(...

  • iOS内存管理

    iOS内存管理机制 基本数据类型无需我们管理,内存管理的范围是对象,iOS内存管理采用了引用计数器的方式来管理内存...

  • iOS内存管理机制

    内存管理机制的原理是引用计数 一. Objective-C提供了两种内存管理方式: MRC,手动引用计数器(man...

  • Effective Objective-C 2.0(读书笔记)五

    第五章 内存管理 二十九:理解引用计数 要点: 引用计数机制通过可以递增递减的计数器来管理内存。对象创建好之后...

  • 内存管理

    内存管理 内存中的五大区域 内存管理的范围 引用计数器(retainCount) ==(少一个人使用就代表当前现在...

网友评论

    本文标题:内存管理 - 引用计数器

    本文链接:https://www.haomeiwen.com/subject/sqonattx.html