美文网首页
关于引用指针引用的若干问题 2018-06-15

关于引用指针引用的若干问题 2018-06-15

作者: iOS打怪升级 | 来源:发表于2018-06-15 11:09 被阅读5次
  1. ARC 下默认指针是强引用:__strong &__weak &__unsafe_unretained的比较
默认强引用:
    Person * p1 = [Person new]; // 相当于 __strong Person * p1 = [Person new];
    Person * p2 = p1; // 相当于 __strong Person * p2 = p1;
    p1 = nil;
    NSLog(@"p1 =%@\n p2 =%@\n ",p1,p2);

    输出:p1 =(null) p2 =<Person: 0x60c000017730>

分析:p1 & p2都采用了强引用,引用计数为2,当p1置空后,计数减一为1 ,那么内存不会释放,所以p2 依旧指向之前的内存地址
------------------
弱引用修饰:
    Person * p1 = [Person new];
    __weak Person * p2 = p1;
    p1 = nil;
    NSLog(@"\np1 =%@\np2 =%@\n ",p1,p2);

    输出:p1 =(null) p2 =(null)

分析:p2采用弱引用,那么引用计数不会增加,依旧为1,当p1置空后,计数减1为0 ,那么内存释放,因为weak 特性,会将p2 也置空
------------------
不安全修饰引用修饰:
    Person * p1 = [Person new];
    __unsafe_unretained Person * p2 = p1;
    p1 = nil;
    NSLog(@"\np1 =%@\np2 =%@\n ",p1,p2);

  输出:p1 =(null) p2 = EXC_BAD_ACCESS(崩溃了)
分析:p1 强引用,计数为1,p1置空释放,计数减1 为0,内存释放;p2 指针不为nil ,依旧指向之前的地址,但是该内存已经为僵尸内存,即将释放,所以运行报错

参考:__strong &__weak &__unsafe_unretained的比较

相关文章

  • 关于引用指针引用的若干问题 2018-06-15

    ARC 下默认指针是强引用:__strong &__weak &__unsafe_unretained的比较 参考...

  • 2018-05-07

    引用 左值引用 右值引用 引用本质 引用指针 int & 引用整数 本质指针int && 引用整数 本质指针 ...

  • go学习第二天

    1.函数 引用类型 指针,slice(切片)、map、function、channel 值引用,指针引用 值引用...

  • 3 - 指针和引用的区别

    引用是refer to指针是point to指针和引用均为复合类型 指针本身为一种对象引用就是一个对象的别名 引用...

  • C++基础

    C++ 值传递、指针传递、引用传递详解C++中引用传递与指针传递区别 引用传递和指针传递的区别 引用的规则:(1)...

  • C++基本问题——指针与引用的区别

    指针与引用的区别 指针可以是空指针,但是引用不能是空引用。这就导致下面一个区别。 指针可能是非法的,引用总是合法的...

  • Go 语言学习笔记-指针、切片与结构体

    指针 指针就是地址。指针变量就是存储地址的变量 指针使用 &p : 引用*p : 解引用、间接引用 栈帧 用来给函...

  • C语言数据结构-链表大解剖

    链表抽象结构解析 引用、解引用、指针、链表赋值取值 链表抽象结构解析 引用、解引用、指针、链表赋值取值

  • 指针 & 引用

    区别: 1.引用必须被初始化,指针不必。 2.引用初始化以后不能被改变,指针可以改变所指的对象。 3.不存在指向空...

  • 指针*、引用&

    指针* int *p = 0; 包含了两部分:int *p,p=0int *p ,表示声明指针变量p,“指针变量”...

网友评论

      本文标题:关于引用指针引用的若干问题 2018-06-15

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