首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
iOS 底层原理
订阅
清落
更多收藏集
微信扫码分享
微信
新浪微博
QQ
13篇文章 · 0订阅
探秘Block(三):weak和strong
我们知道,在ARC中,除了全局block,block都是在栈上进行创建的。使用的时候,会自动将它复制到堆中。中间会经历objc_retainBlock -> _Block_copy -> _Block_copy_internal方法链。换过来说,我们使用的每个拦截了自动变量的b…
抖音品质建设 - iOS启动优化《原理篇》
启动是 App 给用户的第一印象,启动越慢用户流失的概率就越高,良好的启动速度是用户体验不可缺少的一环。启动优化涉及到的知识点非常多面也很广,一篇文章难以包含全部,所以拆分成两部分:原理和实践。 本文从基础知识出发,先回顾一些核心概念,为后续章节做铺垫;接下来介绍 IPA 构建…
iOS拾遗——为什么必须在主线程操作UI
究竟为什么一定要在主线程操作UI呢?如果在后台线程对UI进行操作会发生什么?在后台线程对UI进行操作不是可以更好的避免卡顿吗?这篇文章就是基于这样一些疑问而产生的。
iOS底层原理总结 - 探寻block的本质(一)
block本质上也是一个oc对象,他内部也有一个isa指针。block是封装了函数调用以及函数调用环境的OC对象。 上图中将c++中block的声明和定义分别与oc代码中相对应显示。将c++中block的声明和调用分别取出来查看其内部实现。 上述定义代码中,可以发现,block…
iOS底层原理总结 - Category的本质
Category的实现原理,以及Category为什么只能加方法不能加属性。 load、initialize的区别,以及它们在category重写的时候的调用的次序。 首先我们写一段简单的代码,之后的分析都基于这段代码。 我们之前讲到过实例对象的isa指针指向类对象,类对象的i…
WWDC 2018:iOS 内存深入研究
对于我们的 App 所依赖的设备而言,内存资源是有限的。降低 App 所使用的内存可以提高性能和体验,相反,过大的内存占用可能会导致 App 被系统强制退出。所以每个 iOS 开发者都应该关注内存问题。这一节新的内容不多,基本上都是一些老的知识点。 在探讨内存之前,我们要知道为…
静态拦截iOS对象方法调用的简易实现
最近出现了几篇关于二进制重排启动优化的文章。所有方案中都需要事先统计所有的函数调用情况,并根据函数调用的频次来进行代码的重排。 这些函数调用中,OC对象的方法调用最多。统计OC对象的方法调用可以在运行时通过第三方库比如fishhook来Hook所有objc_msgSend调用来…
iOS 底层拾遗:AutoreleasePool
在阳神的 黑幕背后的Autorelease 文章中已经把 AutoreleasePool 核心逻辑讲明白了,不过多是结论性的东西,笔者通读源码以探究更多的细节,验证一下老生常谈的一些结论。 源码基于 Runtime 750。 可以猜测 push 和 pop 操作是实现自动释放的…
iOS底层原理总结 - 探寻Runtime本质(一)
在学习Runtime之前首先需要对isa的本质有一定的了解,这样之后学习Runtime会更便于理解。 回顾OC对象的本质,每个OC对象都含有一个isa指针,__arm64__之前,isa仅仅是一个指针,保存着对象或类对象内存地址,在__arm64__架构之后,apple对isa…
深入解构objc_msgSend函数的实现
熟悉OC语言的Runtime(运行时)机制以及对象方法调用机制的开发者都知道,所有OC方法调用在编译时都会转化为对C函数objc_msgSend的调用。 系统的Runtime库通过函数objc_msgSend以及OC对象中隐藏的isa数据成员来实现多态和运行时方法查找以及执行。…