首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
iOS
订阅
才同学
更多收藏集
微信扫码分享
微信
新浪微博
QQ
20篇文章 · 0订阅
iOS之武功秘籍②:OC对象原理-中(内存对齐和malloc源码分析)
当我们的TCJPerson对象没有其他属性的时候,只有一个从父类NSObject继承过来的isa时,此时创建TCJPerson对象所需的开辟的内存空间大小为16字节. 当我们增加一个name属性时,此时的size 大小还是 16( if (size < 16) siz…
isa的初始化&指向分析
下方源码中 initInstanceIsa 就干的是这些事情。 简单点来说,其实就是英文 is a 写到一起了,说明某一个对象是什么。比如: object is a NSObject,但是 isa 经过发展之后存储的东西变得相当的庞大。 每个对象都是通过 isa 实例变量连接到…
LLDB
日常开发中我们经常使用Xcode的断点,这一强大的功能解决了我们开发中99%的难题,但是我们的断点其实只是LLDB中的一小部分而已。 LLDB是英文Low Lever Debug的缩写,是XCode内置的为我们开发者提供的调试工具,它与LLVM编译器一起,存在于主窗口底部的控制…
weak 的原理探析
我想了想说,就是把 SideTables 里 weak_table 散列表中持有这个对象的 referent 指针置为 nil ,这个 weak 对象就被释放了,具体释放时机是这个对象dealloc 的时候调用了 objc_destructInstance 时候检查散列表清理。…
iOS之武功秘籍⑤:cache_t分析
在上一篇文章中已经全面地介绍了类的结构,但是还剩下一个cache_t cache没有进行详细的介绍,本文就将从源码层面分析cache_t. 其中的_bucketsAndMaybeMask is a buckets_t pointer,是bucket_t类型的结构体指针. 从以上…
App启动流程之 dyld 探析
从用户点击 App 开始到用户看到第一个界面,这称为一次 App 启动。 一般情况下,App 的启动分为冷启动和热启动。 冷启动是指, App 点击启动前,它的进程不在系统里,需要系统新创建一个进程分配给它启动的情况。这是一次完整的启动过程。 热启动是指 ,App 在冷启动后用…
iOS @property和@synthesize和@dynamic关键字
iOS 6 之后 LLVM 编译器引入property autosynthesis,即属性自动合成,就很少使用synthesize关键字了,dynamic也很少使用,除非一些特殊场景. @property会生产一个带下划线的成员变量,set/get方法声明和实现。 @synth…
iOS之武功秘籍⑧: 类和分类加载过程
在上一篇文章iOS之武功秘籍⑦: dyld加载流程 -- 应用程序的加载中轻描淡写的提了一句_objc_init的_dyld_objc_notify_register,本文将围绕它展开探索分析类和分类的加载. 此方法的关键代码是 for 循环里面的代码. crash的主要原因是…
iOS之武功秘籍⑭: 锁的原理
在自旋锁中,线程会反复检查变量是否可用.由于线程在这个过程中一致保持执行,所以是一种忙等待. 一旦获取了自旋锁,线程就会一直保持该锁,直到显式释放自旋锁.自旋锁避免了进程上下文的调度开销,因此对于线程只会阻塞很短时间的场合是有效的.对于iOS属性的修饰符atomic,它自带一把…
iOS之武功秘籍⑯: LLVM编译流程
clang helloDemo.c编译,生成a.out文件. file a.out查看文件,发现.out文件是:64位的Mach-O可执行文件,当前clang出来的是x86_64架构,mac电脑可读. 所以可以./a.out直接执行: python是解释型语言,一边翻译一边执行…