美文网首页将来跳槽用
iOS内存的代码实现

iOS内存的代码实现

作者: 二斤寂寞 | 来源:发表于2019-05-28 21:50 被阅读26次

苹果的runtime源码可以在这里看runtime,如果你觉得这样看不方便的话,你可以通过wget把源码现在下来看,具体命令如下所示

wget -c -r -np -k -L -p https://opensource.apple.com/source/objc4/objc4-723/

下面我看看苹果的源码是如何实现。 https://opensource.apple.com/source/objc4/objc4-723/runtime/NSObject.mm.auto.html

底层更多实现查看

alloc

alloc.png

retain

retain.png

release

release.png

retainCount

retainCount.png

autorelease

调用autorelease方法的内部实现

- (id) autorelease {
    [NSAutoreleasePool addObject: self];
}

autorelease实例方法的本质就是调用NSAutoreleasePool对象的addObject类方法。

autorelease作用是将对象放入自动释放池中,当自从释放池销毁时对自动释放池中的对象都进行一次release操作。

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
id obj = [[NSObject alloc] init];
[obj autorelease];
[pool drain]; 

ARC下,使用@autoreleasepool{}来使用一个AutoreleasePool,随后编译器会改成下面的样子:

void *context = objc_autoreleasePoolPush();
// 执行的代码
objc_autoreleasePoolPop(context);

而这两个函数都是对AutoreleasePoolPage的简单的封装,所以自动释放机制的核心就在于这个类。
AutoreleasePoolPage是一个C++实现的类
详细讲解查看autoreleasepool

dealloc

dealloc01.png
dealloc.png

object_dispose:


object_dispose.png

objc_destrucInstance:


objc_destrucInstance.png
clearDeallocating:(这就是为什么weak指针置为nil,对象会销毁的内部实现)
clearDeallocating.png

相关文章

  • iOS内存的代码实现

    苹果的runtime源码可以在这里看runtime,如果你觉得这样看不方便的话,你可以通过wget把源码现在下来看...

  • NSURLSession - 上传照片

    iOS10以下,AFNetworking上传照片,发生内存泄漏;因此用NSURLSesion实现上传照片,代码如下:

  • iOS AutoReleasePool的实现原理

    iOS AutoReleasePool的实现原理 [TOC] 本文也属于iOS Objective-C 内存管理的...

  • iOS 0行代码实现 TableView 无数据时展示占位视图

    iOS 0行代码实现 TableView 无数据时展示占位视图 iOS 0行代码实现 TableView 无数据时...

  • iOS 内存布局

    iOS 内存布局 代码段,就是我们的程序在编译的时候都会转化为010101这样的代码,然后就放在内存的代码段这个区...

  • iOS内存相关问题小结

    1.iOS内存 IOS 内存区主要可以划分为五个区,栈区、堆区、全局变量区、常量区、代码区。 栈区:系统负责内存管...

  • 递归

    1 思想 2 代码实现 3 内存原理

  • 逆向学习笔记11——fishhook执行原理及简单防护

    1,fishhook的执行原理 C语言函数通常是静态的,编译之后,从汇编代码变成了内存地址。iOS系统实现了一个动...

  • OC对象内存占用及优化

    结构体内存对齐原理 前言:我们都知道,在iOS开发中,我们写的oc代码,底层都是用c++来实现的,而oc对象本质就...

  • OC--Block总结

    参考 Block编译代码解读:block没那么难(一、二、三)iOS进阶——iOS(Objective-C) 内存...

网友评论

    本文标题:iOS内存的代码实现

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