首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
OC底层原理
cocoCola91667
创建于2023-04-26
订阅专栏
OC底层原理笔记
等 4 人订阅
共32篇文章
创建于2023-04-26
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
iOS-底层-NSObject本质
####问题一:一个NSObject对象占用多少内存? #一. 分析NSObject ##1. 通过源码分析 我们平时编写的Objective-C代码,底层实现其实都是C\C++代码 所以Object
iOS-底层-OC对象的分类
在上一篇文章中,我们讲了NSObject本质,其实上一篇文章讲的是实例对象 Objective-C中的对象,简称OC对象,主要可以分为3种: class对象(类对象) meta-class对象(元类对
iOS-底层-isa指针和superclass指针+窥探Class
上一篇文章,我们介绍了OC对象的分类,它们内存中存放的信息如下图: 但是这个isa和superclass有什么用呢? 首先我们创建两个类,如下: 其中MJStudent继承于MJPerson 一. i
iOS-底层-KVO和KVC
一. KVO 1. KVO的基本使用 KVO的全称是Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变 添加监听: 值改变: 监听改变: 移除监听: 2. KV
iOS-底层-Category分类
iOS中的Category我们经常使用,主要是给一些类添加新的方法,或者拆分类。进行方法调用的时候,如果调用的是写在类里面的方法,调用顺序是:首先,实例对象根据它的isa找到类对象,然后去类对象里面的
iOS-底层-+load和+initialize方法
#一. +load方法 1. +load方法调用顺序 调用时机:+load方法会在Runtime加载类、分类时调用。 调用顺序:先调用父类的+load,后调用子类的+load,再调用分类的+load,
iOS-底层-关联对象
前两篇文章我们学习了关于Category的知识Category分类和load和initialize,现在再看一个问题,Category能否添加成员变量?如果可以,如何给Category添加成员变量?
iOS-block1-底层结构、变量捕获、类型
如下代码就是个block,block不会主动调用 运行之后,发现并没有打印。 如果在block后面加个(),发现block就立马调用了: 一般我们都把block保存起来,在需要的时候才调用。 #一.
iOS-block2-copy操作、对象类型的auto变量、__block
上篇文章只是简单讲了MRC环境下block的copy操作。 #一. ARC环境下,block的copy操作 接下来我们讲的都是在ARC环境下。 观察如下代码: 打印: 上文我们说过如果block访问了
iOS-block3-__block变量的内存管理、__forwarding、__block修饰的对象类型、循环引用
上文讲了一下__block的原理,但是关于__block还有一些其他东西,这篇文章就来慢慢讲述。 #一. __block变量的内存管理 通过上文我们知道,block捕获对象类型的auto变量就会多出两
iOS-Runtime1-isa存储信息分析
Objective-C是一门动态性比较强的编程语言,跟C、C++等语言有着很大的不同。 什么叫动态性? 一般应用程序运行需要经过三步:编写代码 -> 编译 -> 运行,如果是C语言,编译之后方法就确定
iOS-Runtime2-Class的内部结构、method_t、cache
一. Class的内部结构 在isa指针和superclass指针+窥探Class中,我们初步窥探了Class的内部结构,如下: 如上图,objc_class内部有isa指针(继承objc_objec
iOS-Runtime3-objc_msgSend底层调用流程
经过上面的学习我们知道,当调用方法[person test],就是给person对象发送test消息,然后通过isa->superclass-> superclass......寻找类对象,找到类对象
iOS-Runtime4-objc_msgSend源码解析
一. 三大阶段 1. 消息发送 2. 动态方法解析 3. 消息转发 二. 整体分析 可能是因为objc_msgSend调用次数太多,苹果为了效率,使用了更底层的汇编来实现objc_msgSend。 E
iOS-Runtime5-super
一. super底层实现 先看结论: ① 消息接收者仍然是子类对象 ② 从父类开始查找方法的实现 MJStudent继承于MJPerson,MJPerson继承于NSObject,在MJStudent
iOS-Runtime6-API
导入#import <objc/runtime.h>头文件,我们就能使用runtime相关的API了,这里介绍一些常用的API。 #一. 类相关API 1. object_getClass、objec
iOS-Runloop1-Runloop
#一. RunLoop相关 什么是Runloop? 顾名思义,Runloop就是运行循环,就是在程序运行过程中循环做一些事情。 RunLoop的基本作用: 处理App中的各种事件(比如触摸事件、定时器
iOS-Runloop2-线程保活
如果经常要在子线程中做事情,不使用保活,就会一直创建、销毁子线程,这样很耗性能的,所以经常在子线程做事情最好使用线程保活,比如AFN2.X就使用RunLoop实现了线程保活。 #一. 实现线程保活 为
iOS-多线程1-GCD
首先看一下iOS中多线程的实现方案 这些多线程方案的底层都是依赖pthread NSThread线程生命周期是程序员管理,GCD和NSOperation是系统自动管理 NSThread和NSOpera
iOS-多线程2-线程安全、OSSpinLock
#一. 安全隐患 利用多线程异步可以同时做不同的事情,效率更高,但是这样也会有安全隐患。 造成安全隐患的原因: 一块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源,比如多个线程访问同一个
下一页