美文网首页
内存管理

内存管理

作者: J星O海E | 来源:发表于2021-07-03 20:42 被阅读0次

    iOS 的内存管理方案有哪些?

    RC:引用计数机制。采用引用计数来管理对象的内存,当需要持有一个对象时,使它的引用计数 +1;当不需要持有一个对象的时候,使它的引用计数 -1;当一个对象的引用计数为 0,该对象就会被销毁。

    引用计数存储在哪里?以前存储在哪?现在呢?

    32位:对象的引用计数都存储在一个叫SideTable结构体的RefCountMap(引用计数表)散列表中。

    64位:存储在isa中,isa用nonpointer表示,变成了一个共用体(union)结构。

    你能讲一下 super 的原理吗?

    先大概解释一下self和super。self是对象指针,指向当前消息接收者。super是编译器指令,使用super调用方法是从当前消息接收者类的父类中开始查找方法的实现,但消息接收者还是子类。有关self和super的详细解释可以参阅

    ARC 下没有 retain / release 等方法了吗?

    CoreFoundation还是需要手动管理内存。ARC能够管理Objective-C对象的内存,却不能管理CF对象,CF对象依然需要我们手动管理内存。

    Toll-Free Bridged 了解过吗?详细描述一下。

    Core Foundation和Foundation框架的一些数据类型是可以相互转换的。这些可以相互转换的数据类型称为toll-free bridged数据类型。

    所有权修饰符有哪些?

    __strong:是默认修饰符。只要有强指针指向对象,对象就会保持存活。

    __weak:指定一个不使引用对象保持存活的引用。当一个对象没有强引用时,弱引用weak会自动置为nil。

    __unsafe_unretained:指定一个不使引用对象保持存活的引用,当一个对象没有强引用时,它不会置为nil。如果它引用的对象被销毁,就会产生悬垂指针。

    __autoreleasing:用于表示通过引用(id *)传入,并在返回时(autorelease)自动释放的参数。

    Tagged Pointer 是什么?

    为了节省内存和提高执行效率,苹果在64bit程序中引入了Tagged Pointer技术,用于优化NSNumber、NSDate、NSString等小对象的存储。

    在引入 Tagged Pointer 技术之前

    NSNumber等对象存储在堆上,NSNumber的指针中存储的是堆中NSNumber对象的地址值。

    在引入 Tagged Pointer 技术之后

    NSNumber等对象的值直接存储在了指针中,不必在堆上为其分配内存,节省了很多内存开销。在性能上,有着 3 倍空间效率的提升以及 106 倍创建和销毁速度的提升。

    相关文章

      网友评论

          本文标题:内存管理

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