序言
最近正在重新系统的学习iOS,收集了一些自己认为不错的博客和资料和大家分享。有⭐️标记的是我看过觉得详细易懂的文章。
底层
isa和Class⭐️--参考:(What is a meta-class in Objective-C?、[译]Objective-C中的meta-class是什么、iOS 程序 main 函数之前发生了什么、从 NSObject 的初始化了解 isa、深入解析 ObjC 中方法的结构、刨根问底 Objective-C Runtime(1)- Self & Super)
消息发送与转发⭐️--参考:(Objective-C 消息发送与转发机制原理、Hmmm, What’s that Selector?、dyld: Dynamic Linking On OS X*)
如何正确使用runtime⭐️
深入理解Objective-C:Category⭐️--参考:(《Objective-C +load vs +initialize》、iOS动态性(二)可复用而且高度解耦的用户统计埋点实现、KVO中的缺陷)
深入研究 Block 捕获外部变量和 __block 实现原理⭐️--参考:(A look inside blocks: Episode 3 (Block_copy))
深入研究 Block 用 weakSelf、strongSelf、@weakify、@strongify 解决循环引用--参考:(关于ARC详细的文档)
iOS 如何实现 Aspect Oriented Programming
iOS底层原理总结 - 探寻OC对象的本质
iOS底层原理总结 - 探寻Class的本质
iOS底层原理总结 - 探寻KVO本质
KVC原理剖析
KVC解析(一) —— 基本了解
KVC解析(二) —— 不可不知的赋值深层次原理
KVC解析(三) —— 不可不知的取值深层次原理
KVC解析(四) —— keyPath的深度解析
KVC解析(五) —— KVC几种典型的异常处理
KVC解析(六) —— KVC容器类及深层次原理
KVC解析(七) —— KVC正确性的验证
AutoreleasePool底层实现原理 -
OS底层原理总结 - RunLoop
RunLoop入门 看我就够了
RunLoop已入门?不来应用一下?
深入理解RunLoop -
深入理解RunLoop⭐️
iOS开发-RunLoop的退出方式 -
iOS引用计数管理之揭秘计数存储
iOS开发之weak底层实现原理
Objective-C runtime机制(6)——weak引用的底层实现原理
iOS总结-NSArray的底层实现 - qq_28551705的博客 - CSDN博客
关于NSArray的二三事 -
CALayer
CALayer图层简介
CoreGraphics
Quartz 2D编程指南(一)—— 简介
Quartz 2D编程指南(二)—— Quartz 2D概览
Quartz 2D编程指南(三)—— 图形上下文
Quartz 2D编程指南(四)—— Paths路径(一)
Quartz 2D编程指南(五)—— Paths路径(二)
Quartz 2D编程指南(六)—— 颜色和颜色空间
Quartz 2D编程指南(七)—— 变换
Quartz 2D编程指南(八)—— Patterns图案样式
Quartz 2D编程指南(九)—— 阴影
Quartz 2D编程指南(十)—— 渐变
Quartz 2D编程指南(十一)—— 透明
Quartz 2D编程指南(十二)—— Quartz 2D中的数据管理
Quartz 2D编程指南(十三)—— 位图图像和图像蒙版(一)
Quartz 2D编程指南(十四)—— 位图图像和图像蒙版(二)
Quartz 2D编程指南(十五)——Core Graphics图层绘制
Quartz 2D编程指南(十六)——PDF文档创建,查看和转换
Quartz 2D编程指南(十七)—— PDF文件解析
Quartz 2D编程指南(十八)——PostScript转换
以上文章全部读完对Quartz 2D会有一个全面的了解
ImageI/O
iOS中ImageIO框架详解与应用分析
iOS 图片压缩限制大小最优解
多线程
iOS Swift GCD 开发教程
深入浅出GCD⭐️
iOS 多线程:『GCD』详尽总结
iOS Swift GCD 开发教程
深入浅出GCD(滴滴工程师博客)
iOS多线程-各种线程锁的简单介绍 -
线程死锁
NSOperation的进阶使用和简单探讨
网络
原理
一篇文章带你详解 HTTP 协议(网络协议篇一)
一篇文章带你熟悉 TCP/IP 协议(网络协议篇二)
HTTPS详解⭐️
iOS安全系列之一:HTTPS
浅析HTTPS中间人攻击与证书校验
SSL三种类型证书有什么区别
为什么Tcp连接的创立需要三次握手 ,而断开需要四次挥手_CSDN博客
iOS中长连接的那些事
基础
NSURLSession系列(一) - NSURLConfiguration
NSURLSession系列(二)- 创建Session对象
NSURLSession系列(三)-请求过程
NSURLSession系列(四)- 设置缓存
NSURLSession系列(五)- cookie
NSURLSession系列(六)-内存管理
CFNetwork框架详细解析 —— CFNetwork编程指导之简介(一)
CFNetwork框架详细解析—— CFNetwork编程指导之CFNetwork概念(二)
CFNetwork框架详细解析 —— CFNetwork编程指导之流的处理(三)
CFNetwork框架详细解析—— CFNetwork编程指导之与HTTP服务器通信(四)
CFNetwork框架详细解析 —— CFNetwork编程指导之与验证HTTP服务器通信(五)
CFNetwork框架详细解析—— CFNetwork编程指导之使用FTP服务器(六)
CFNetwork框架详细解析 —— CFNetwork编程指导之使用网络诊断(七)
NSURLRequestCachePolicy 缓存策略讲解
利用CocoaHttpServer搭建手机本地服务器
CocoaHTTPServer 和 视频边下边播
即时通讯
iOS即时通讯,从入门到“放弃”?
iOS:protocolBuffer + ysocket 实现即时通讯
NSUrlSession
WebSocket介绍和Socket的区别
WebSocket协议:5分钟从入门到精通
MQTT 协议基本介绍
BSDSocket搭建服务器
MQTT-Client-Framework
服务器
NodJs搭建Web服务器
WebKit
WKWebView详解⭐️
深入剖析 WebKit(滴滴技术专家戴铭博客)
JavaScriptCore全面解析 (上篇)⭐️
JavaScriptCore全面解析 (下篇)⭐️
深入浅出 JavaScriptCore
深入理解JavaScriptCore
深入剖析 JavaScriptCore(滴滴技术专家戴铭博客)
JSPatch-实现原理详解⭐️
存储
iOS - keychain 详解及变化
iOS Keychain使用说明
Swift保存RSA密钥到Keychain
SQLite语句以及FMDB基本使用方法
音视频
AVFoundation编程指南文档-思维导图总览
AVFoundation开发秘籍笔记-01AVFoundation入门
AVFoundation开发秘籍笔记-02播放和录制音频
AVFoundation开发秘籍笔记-03资源和元数据
AVFoundation开发秘籍笔记-04视频播放
AVFoundation开发秘籍笔记-05AVKit用法-AVPlayerViewController
AVFoundation开发秘籍笔记-06捕捉媒体
AVFoundation开发秘籍笔记-07高级捕捉功能之录制视频缩放
AVFoundation开发秘籍笔记-07高级捕捉功能之人脸识别
AVFoundation开发秘籍笔记-07高级捕捉功能之机器码识别(条码扫描)
AVFoundation开发秘籍笔记-08读取与写入媒体
AVFoundation开发秘籍笔记-09媒体的组合和编辑
AVFoundation开发秘籍笔记-010混合音频初接触
AVFoundation开发秘籍笔记-11创建视频过渡效果
AVFoundation开发秘籍笔记-12动画图层内容CoreAnimation
AVFoundation视频处理的时间CMTime
基于AVPlayer实现的视频播放器
一步一步教你实现iOS音频频谱动画(一)
一步一步教你实现iOS音频频谱动画(二)
直播
菜鸟也能懂的 - 音视频基础知识。
【如何快速的开发一个完整的iOS直播app】(原理篇)
【如何快速的开发一个完整的iOS直播app】(播放篇)
【如何快速的开发一个完整的iOS直播app】(采集篇)
【如何快速的开发一个完整的iOS直播app】(美颜篇)
1小时学会:最简单的iOS直播推流(一)项目介绍
1小时学会:最简单的iOS直播推流(二)代码架构概述
1小时学会:最简单的iOS直播推流(三)使用系统接口捕获音视频
1小时学会:最简单的iOS直播推流(四)如何使用GPUImage,如何美颜
1小时学会:最简单的iOS直播推流(五)yuv、pcm数据的介绍和获取
1小时学会:最简单的iOS直播推流(六)h264、aac、flv介绍
1小时学会:最简单的iOS直播推流(七)h264/aac 硬编码
1小时学会:最简单的iOS直播推流(八)h264/aac 软编码
1小时学会:最简单的iOS直播推流(九)flv 编码与音视频时间戳同步
1小时学会:最简单的iOS直播推流(十)librtmp使用介绍
1小时学会:最简单的iOS直播推流(十一)sps&pps和AudioSpecificConfig介绍(完结)
开发视频直播APP需要了解的技术原理和技术细节(只是讲了使用哪些技术和SDK)
GPUImage详细解析
GPUImage详细解析(二)
GPUImage详细解析(三)- 实时美颜滤镜
GPUImage详细解析(四)模糊图片处理
GPUImage详细解析(五)滤镜视频录制
GPUImage详细解析(六)-用视频做视频水印
GPUImage详细解析(七)文字水印和动态图像水印
GPUImage详细解析(八)视频合并混音
GPUImage详细解析(十)用GPUImage和指令配合合并视频
GPUImage详细解析(十一)美颜+人脸识别
GPUImage详细解析(十二)Sobel边界检测
以上文章全部读完对直播开发将有全面的了解
内购
1. iOS内购IAP(一) —— 基础配置篇(一)
2. iOS内购IAP(二) —— 工程实践(一)
3. iOS内购IAP(三) —— 编程指南之关于内购(一)
4. iOS内购IAP(四) —— 编程指南之设计您的应用程序的产品(一)
5. iOS内购IAP(五) —— 编程指南之检索产品信息(一)
6. iOS内购IAP(六) —— 编程指南之请求支付(一)
7. iOS内购IAP(七) —— 编程指南之促进应用内购买(一)
8. iOS内购IAP(八) —— 编程指南之提供产品(一)
9. iOS内购IAP(九) —— 编程指南之处理订阅(一)
10. iOS内购IAP(十) —— 编程指南之恢复购买的产品(一)
11. iOS内购IAP(十一) —— 编程指南之准备App审核(一)
12. iOS内购IAP(十二) —— 一个详细的内购流程(一)
13. iOS内购IAP(十三) —— 一个详细的内购流程(二)
14. iOS内购IAP(十四) —— IAP的收据验证(一)
15. iOS内购IAP(十五) —— IAP的收据验证(二)
推送通知
iOS开发 iOS10推送必看(基础篇)
iOS开发 iOS10推送必看(高阶1)
iOS10推送必看UNNotificationServiceExtension -
iOS10推送必看UNNotificationContentExtension
架构
iOS应用架构谈 开篇(规范)
iOS应用架构谈 view层的组织和调用方案
iOS应用架构谈 网络层设计方案
iOS应用架构谈 本地持久化方案及动态部署
iOS应用架构谈 组件化方案
私有库管理和模块化管理
组件化架构漫谈⭐️
快速理解 设计模式六大原则(我面58的时候被问过)
iOS设计模式的六大设计原则 -
调试
xcode中debug的一些用法(lldb)
深入iOS系统底层之crash解决方法介绍
xcode8 instruments测试工具使用一
Xcode8 Instruments 测试工具使用二
Xcode8 Instruments 测试工具使用三
Xcode8 Instruments 测试工具使用四
Xcode8 Instruments 测试工具使用五
ios 单元测试【单元测试编码规范】
iOS Crash处理方法(一):利用MethodSwizzle避免Crash
iOS Crash处理方法(二):自己编写代码定位Crash
性能优化
iOS 保持界面流畅的技巧⭐️
iOS启动时间优化
RunLoop应用之性能优化 - 恋~时光 - 博客园
UITableView优化--使用runloop,优化耗时较多的事件 - i..._CSDN博客
iOS视图渲染以及性能优化总结 -
NSCache和NSURLCache、网络缓存优化 - Mike_zh - 博客园
深度优化iOS网络模块
IM UI性能优化之异步绘制 -
FPSLabel
skyming/iOS-Performance-Optimization (一篇对优化文章的全面收集)
如何精确度量 iOS App 的启动时间 -
深入剖析 iOS 性能优化(滴滴技术专家戴铭博客)
iOS的几种定时器及区别
安全
iOS - 使用FMDB进行数据库加密 -
Xcode动态调试原理 -
iOS-对App进行砸壳 -
1. APP安全机制(一)—— 几种和安全性有关的情况
2. APP安全机制(二)—— 使用Reveal查看任意APP的UI
3. APP安全机制(三)—— Base64加密
4. APP安全机制(四)—— MD5加密
5. APP安全机制(五)—— 对称加密
6. APP安全机制(六)—— 非对称加密
7. APP安全机制(七)—— SHA加密
8. APP安全机制(八)—— 偏好设置的加密存储
9. APP安全机制(九)—— 基本iOS安全之钥匙链和哈希(一)
10. APP安全机制(十)—— 基本iOS安全之钥匙链和哈希(二)
第三方框架源码解析
一行行看SDWebImage源码(一)
一行行看SDWebImage源码(二)
SDWebImage4.0源码探究(一)面试题 -
SDWebImage源码阅读系列(5)
SDWebImage源码解析(一)——WebCache+Manager模块
SDWebImage源码解析(二)——SDImageCache缓存模块
SDWebImage源码解析(三)——SDWebImage图片解码/压缩模块 -
SDWebImage源码解析(四)——SDWebImage图片下载模块
AFNetworking到底做了什么?
AFNetworking到底做了什么?(二)
AFNetworking到底做了什么?(终)
AFNetworking之于https认证
AFNetworking源码阅读系列(6)
FMDB 使用进阶 -
FMDB源码阅读系列(3)
fmdb中databasequeue的使用,避免死锁 - codeTao - 博客园
[iOS 开发] WebViewJavascriptBridge 从原理到实战 -
[iOS]JPVideoPlayer 3.0 使用介绍
[iOS]JPVideoPlayer 3.0 源码解析
[iOS]仿微博视频边下边播之封装播放器
[iOS]仿微博视频边下边播之滑动TableView自动播放
[iOS]从使用 KVO 监听 readonly 属性说起
[iOS]如何重新架构 JPVideoPlayer ?
MJExtension框架源码分析 - 飞鱼湾 - 博客园
优雅的PromiseKit
AsyncDisplayKit的使用
Texture
Alamofire框架的使用一 —— 基本用法
零散知识点
iOS开发 简化view controller
iOS 实现自动登录(从低级做法到高级做法)
深入iOS系统底层之程序映像
面试驱动技术 - Block看我就够了【干货】
iOS组件化方案对比
深入iOS系统底层之crash解决方法介绍
iOS开发之Notification与多线程
iOS开发 之 不要告诉我你真的懂isEqual与hash!
使用LLDB调试程序
获取UUID和keychain存储代码
Block里面的weak-strong理解 -
iOS 开发者必会的几项技能,不知不用你就OUT了
Xcode 10.1新功能及解决的问题
关于iOS学习进阶的必读一些博客总结
UIViewController中各方法调用顺序及功能详解 -
iOS中的SEl和IMP到底是什么
iOS 程序启动过程
为什么Swift比OC快? -
深入理解@autoreleasepool -
YYKit @autoreleasepool 使用,优化内存
iOS加密方式(RSA签名、加密、AES)
公钥与私钥,HTTPS详解 - 迪米特 - 博客园
自动埋点
网易HubbleData无埋点SDK在iOS端的设计与实现
iOS类方法load和initialize详解 -
NSTimer循环引用解决方案 - (补充:造成循环引用的原因是runloop持有timer,timer持有target,用timer的block方法也可以防止泄露)
iOS PassKit Wallet 开发
iOS 初中级工程师简历指北
非越狱下 iOS代码注入&HOOK微信登录
iOS里的动态库和静态库
自动化打包
iOS持续集成—Jenkins(最新最全)
详解Shell脚本实现iOS自动化编译打包提交(运行脚本上传到Fir&AppStore,内容较详细)
iOS 命令行打包(新手)(打包的命令,内容简洁)
企业级APP通过网页实现下载安装
Swift
SwiftUI
SwiftUI 的 DSL 语法分析
编译原理
iOS编译过程的原理和应用
iOS汇编入门
深入iOS系统底层之程序中的汇编代码
深入浅出iOS编译
知名学习网站与博客
iOS ExampleCocoa Controls(这两个网站收集了大量的开源组件和库,并且进行了非常详细的分类。)
Open-Source iOS Apps(收录了很多优秀的,完整的开源iOS App,并做了详细分类,专门标出了上架了App Store的开源iOS APP)
Awesome iOS(一个值得推荐的网站,里面包含了 iOS 开发的方方面面,而且内容都是经过人工筛选、分类的。)
NSHipster(AFNetworking 和 Alamofire 的作者 Mattt维护的网站,主要关注一些不常用的iOS知识点)
知名开发者
开源项目团队
iOS 开发舆图(滴滴工程师博客)
结语
每篇文章都有自己的重点和不足,由于时间原因有的博客我还没有看,我会随着学习补充缺失的内容,删掉内容较差的博客。