Leo的专栏

https://github.com/LeoMobileDeveloper

深入浅出iOS编译

前言 两年前曾经写过一篇关于编译的文章《iOS编译过程的原理和应用》,这篇文章介绍了iOS编译相关基础知识和简单应用,但也很有多问题都没有解释清楚: Clang和LLVM究竟是什么 源文件到机器码的细节 Linker做了哪些工作 编译顺序如何确定 头文件是什么?XCode是如何找到头文件的? C...

2018-12-23 20:59:26

阅读数:9332

评论数:7

聊聊AppDelegate解耦

AppDelegate 在iOS开发中,AppDelegate指的是UIApplicationDelegate,用来处理App层面的事件,包括生命周期变化,OpenURL,处理HandOff和Intent等。 每个iOS都有一个入口函数main,其中的一个参数就是AppDelegate: i...

2018-08-12 18:52:46

阅读数:23649

评论数:1

iOS 性能优化 - Allocations分析内存分配

Allocations Allocations用来分析静态内存分配。 Demo项目 Demo App Demo是一个简单的图片应用:首页只有一个简单的入口;次级页面会读取本地页面,加滤镜,然后按照瀑布流的方式显示出来;第三个页面提供大图显示; 运行代码:点击Photos -&am...

2018-10-21 14:45:24

阅读数:1088

评论数:0

实现一个优雅的iOS事件总线

目标 订阅登录事件LoginEvent,当self dealloc时候自动取消订阅 [QTSub(self, LoginEvent) next:^(LoginEvent *event) { }]; 订阅通知NSNotification,当self dealloc的时候自动取消订阅 ...

2018-07-12 22:33:40

阅读数:2576

评论数:1

深入理解Toll-Free Bridging

前言 Toll-Free Bridging本身不是什么新技术,那为什么还要写这篇博客呢? 原因是今天和一个同事讨论到相关问题的时候,发现理解并不够深入,于是仔细研究了下,整理成了这篇博客。 本文的Github地址:LeoMobileDeveloper Toll-Free Bridgin...

2018-04-26 15:28:28

阅读数:880

评论数:3

iOS汇编精讲(上篇)

前言 日常的应用开发中,主要用的语言是Objective(Swift),一些特殊场景下,可能还会用到C/C++,JavaScript,Shell,Python等。 那么,一个iOS开发者为什么要了解汇编这么底层的语言呢? 因为看得懂汇编能够提高的代码调试和逆向能力。 本文是作者学习...

2018-04-21 12:11:32

阅读数:1448

评论数:5

Objective C范型

范型 范型编程是一种程序语言设计范式,它允许程序员在使用强类型的语言编写代码的时候,延迟确定具体的类型。 以Swift代码为例,假如有一个需求是要交换两个int,很容易写出类似代码 func swapTwoInts(_ a: inout Int, _ b: inout Int) { ...

2018-01-07 14:51:16

阅读数:1059

评论数:0

Fishhook替换C函数的原理

FishhookFishhook是FaceBook出品的,可以用来Hook C函数的一个开源库。它的主要接口就一个:struct rebinding { const char *name; //字符串名称 void *replacement; //替换后的方法 void **repla...

2017-11-04 16:17:48

阅读数:2919

评论数:0

深入理解iOS App的启动过程

前言 启动时间是衡量应用品质的重要指标。 本文首先会从原理上出发,讲解iOS系统是如何启动App的,然后从main函数之前和main函数之后两个角度去分析如何优化启动时间。准备知识Mach-O哪些名词指的是Mach-o Executable 可执行文件 Dylib 动态库 Bundle 无法被...

2017-10-23 13:28:28

阅读数:9753

评论数:20

Moya的设计之道

前言 Moya是一个基于Alamofire开发的,轻量级的Swift网络层。Moya的可扩展性非常强,可以方便的RXSwift,PromiseKit和ObjectMapper结合。 如果你的项目刚刚搭建,并且是纯Swift的,非常推荐以Moya为核心去搭建你的网络层。另外,如果你对Alamof...

2017-08-11 13:44:52

阅读数:5286

评论数:21

实现60fps的网易云音乐首页

前言网易云音乐是一款很优秀的音乐软件,我也是它的忠实用户。最近在研究如何更好的开发TableView,接着我写了一个Model驱动的小框架 - MDTable。为了去验证框架的可用性,我选择了网易云音乐的首页来作为Demo,语言是Swift 3。本文的内容包括: 实现网易云音乐首页的思路 如何建立...

2017-07-28 14:38:34

阅读数:3549

评论数:3

优雅的开发TableView

前言UITableView(UITableViewController)是iOS开发使用频率最高的一个组件。不管是使用UITableView还是还是UITableViewController,在开发的时候,我们都需要实现两个协议: UITableViewControllerDataSource U...

2017-06-19 11:57:34

阅读数:4851

评论数:8

MVVM与Controller瘦身实践

前言MVC是一个做iOS开发都知道的设计模式,也是Apple官方推荐的设计模式。实际上,Cocoa Touch就是按照MVC来设计的。这里,我们先不讲MVC是什么,我们先来谈谈软件设计的一些原则或者说理念。在开发App的时候,我们的基本目标有以下几点: 可靠性 - App的功能能够正常使用 健壮性...

2017-06-12 11:20:19

阅读数:7830

评论数:6

Alamofire的设计之道

前言:Alamofire是一个由Swift编写的优雅的网络开发框架。大部分用Swift编写的iOS App的网络模块都是基于Alamofire的。作为Swift社区最活跃的几个项目之一,有许多开发者在不断的对其进行完善,所以学习这种优秀的开源代码对深入理解Swift的特性很有帮助。

2017-06-03 18:54:52

阅读数:8574

评论数:3

消息转发机制与Aspects源码解析

前言最近在搞重构相关的事情,遇到了不少这样的场景: 进入一个界面,在viewWillAppear:的时候做相应判断,如果满足条件则执行对应代码。 这类业务有一个特点,业务内容是对应整个App的,与对应的ViewController毛关系都没有,但是却不得不耦合到(即使是调用代码可以精简到一行)...

2017-05-22 22:55:51

阅读数:3101

评论数:0

Objective C block背后的黑魔法

前言block在Objective C开发中应用非常广泛,我们知道block会捕获外部对象,也知道使用block要防止循环引用。那么block这套机制在Objective C中是如何实现的呢?本文通过从C/C++到汇编层面分析block的实现原理。Clangclang是XCode的编译器前端,编译...

2017-04-17 14:24:44

阅读数:5374

评论数:3

深入理解Objective C的ARC机制

从Runtime源码和汇编的角度深入挖掘ARC的本质

2017-04-11 09:05:35

阅读数:3281

评论数:2

iOS 10越狱和Reveal 8分析三方App UI框架教程

前言这是一篇写给开发者的博客,如果碰巧非开发者搜到了这篇博客,那么博客的内容可能不适合你。其实网上Reveal的教程很多,但是很多都是停留在Reveal 1或者Reveal 2时代的博客,不太适合最新版本的Reveal 7,所以还是决定写这样一篇文章。本文最终的效果:淘宝首页: 可以看到,淘宝首页...

2017-04-05 22:27:07

阅读数:7363

评论数:3

iOS自动化测试的那些干货

前言 如果有测试大佬发现内容不对,欢迎指正,我会及时修改。 大多数的iOS App(没有持续集成)迭代流程是这样的也就是说,测试是发布之前的最后一道关卡。如果bug不能在测试中发现,那么bug 就会抵达用户,所以测试的完整性和可靠性十分重要。目前,大多数App还停留在人工测试阶段,人工测试投...

2017-03-09 12:08:37

阅读数:13308

评论数:21

优雅的开发Swift和Objective C混编的Framework

前言为什么要写这样一篇文章,因为昨天和一个朋友讨论到Swift和Objective C如何混合开发Framework,中途发现了很多有意思的坑。用Swift封住哪个OC的库是一件比较常见的事情,毕竟对于大多数公司来说,老的代码都是用OC写的,而且经过多次迭代,这些OC的代码已经被验证了是稳定的,用...

2017-03-02 16:41:58

阅读数:10001

评论数:16

提示
确定要删除当前文章?
取消 删除