美文网首页
内存管理weak指针的原理

内存管理weak指针的原理

作者: 越天高 | 来源:发表于2020-11-13 20:06 被阅读0次

weak指针的实现原理
当他指向的对象销毁之后,会将这个指针指向nil,这样就避免产生野指针的错误,他是如何办到的呢,他会把当前对象的弱引用都存放到一个表中,当这个对象被销毁的时候他会将表里面对象删除,并且把引用计数清空
我们可以查看dealloc 的源码,源码source里面的NSObject类, 当一个对象要释放时,会自动调用dealloc,接下的调用轨迹是
dealloc
_objc_rootDealloc
rootDealloc
object_dispose
objc_destructInstance、free


函数内容
__strong Person *person1;
        __weak Person *person2;
        __unsafe_unretained Person *person3;
        NSLog(@"111");
        {
            Person *person = [[Person alloc] init];//正常情况出了大括号就会自动销毁
           // person1 = person;//__strong指针的话要等到person1销毁才会销毁111 222 Person--dealloc
             //person2 = person;//__weak不会产生强引用,当指向的对象销毁之后,会将指针设置为nil
             person3 = person; //__unsafe_unretained不会产生强引用,当指向的对象销毁之后,依然会指向那个对象,
            //如果再去访问的话会出现也指针错误
            
        }
        NSLog(@"%@", person2); //null
        NSLog(@"222");

ARC帮我们做了什么
arc利用LLVM编译器,自动帮我们生成release retain autorelease代码,利用runtime和LLVM帮我们处理,像弱引用这样的存在

相关文章

  • iOS面试必刷基础题知识点

    1.内存管理 2.深拷贝与浅拷贝 3.weak指针实现原理 4.Copy、Strong、Weak、Assign的区...

  • 内存管理weak指针的原理

    weak指针的实现原理当他指向的对象销毁之后,会将这个指针指向nil,这样就避免产生野指针的错误,他是如何办到的呢...

  • Swift中的内存管理

    1、内存管理,weak和unowned2、@autoreleasepool3、C 指针内存管理 1、内存管理,we...

  • 【iOS内存管理】weak指针的原理

    1、__strong、__weak、__unsafe_unretained的比较 2、weak是怎么实现的,看底层...

  • 内存管理剖析(七)—— weak指针实现原理

    iOS引用计数的存储 我在isa的深入体会一文中介绍过,苹果从arm64架构开始,对isa进行了优化,通过位域计数...

  • 内存管理面试题

    1.weak实现原理当一个对象被weak指针指向时,这个weak指针会以对象为key存储到一个weak指针数组里面...

  • @property关键字

    1.weak: weak,弱指针,不会让引用计数器+1,如果指向对象被销毁,指针会自动置nil weak原理: r...

  • iOS高频面试题(持续更新)

    1、ARC和MRC管理内存有什么不同,iOS中内存管理的原理 2、assign和weak的区别,解释一下stron...

  • 2020-09-28 技术回顾

    weak的实现原理 Runtime 维护了一个 weak表,用于存储指向某个对象的所有weak指针。weak表 其...

  • iOS内存管理详解

    目录 block内存管理 autorelease内存管理 weak对象内存管理 NSString内存管理 new、...

网友评论

      本文标题:内存管理weak指针的原理

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