• 等级
  • 1616507 访问
  • 300 原创
  • 0 转发
  • 927 排名
  • 375 评论
  • 1088 获赞

深入浅出iOS编译

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

2018-12-23 20:59:26

iOS 性能优化 - TimeProfiler分析代码耗时

TimeProfilerTimeProfiler用来分析代码的执行时间,主要用来分析CPU使用情况。注意:要在release模式(或者自定义的其他的打包模式)下分析,原因在release模式下:会开启编译器优化,提高代码运行效率生成调试的符号表,这样才能够在profile的时候看到代码的调用栈多数条件编译只会在debug模式下生效,release模式和生产环境是一样的。Dem...

2018-11-20 23:37:02

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

AllocationsAllocations用来分析静态内存分配。Demo项目DemoAppDemo是一个简单的图片应用:首页只有一个简单的入口;次级页面会读取本地页面,加滤镜,然后按照瀑布流的方式显示出来;第三个页面提供大图显示;运行代码:点击Photos->进入main->点击一张图,进入详情页->Pop直到回到第一个页面,重复这段操作,从XCode...

2018-10-21 14:45:24

XCode 10打包上传后在iOS 9上Crash(2018)

问题描述:XCode10打包的App在iOS9上Crash。原因:AppStore的Bug,上传后的代码经过AppStore处理后,加载assets中的图在iOS9上会Crash。解决方案:切回到XCode9.4打包,前提是你没有用到一些iOS12的新特性。弃用Assets,把里面的图(除了icon和launchimage)拖拽到项目里,按照普通图片的方式使用。等待...

2018-09-28 23:12:27

聊聊AppDelegate解耦

AppDelegate在iOS开发中,AppDelegate指的是UIApplicationDelegate,用来处理App层面的事件,包括生命周期变化,OpenURL,处理HandOff和Intent等。每个iOS都有一个入口函数main,其中的一个参数就是AppDelegate:intmain(intargc,char*argv[]){@autoreleasep...

2018-08-12 18:52:46

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

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

2018-07-12 22:33:40

深入理解iOS Crash Log

CrashLogCrashLog的主要来源有两种:Apple提供的,可以从用户设备中直接拷贝,或者从iTunesConnect(XCode)下载三方或者自研Framework统计,三方服务包括Fabric,Bugly等。这篇文章讲到的CrashLog是Apple提供的。获取设备获取USB连接设备,接着在XCode菜单栏依次选择:Window->...

2018-07-06 21:11:36

XCode启动参数和环境变量

前言这一部分介绍XCode中Argument/Options模块,通过这两个模块,我们可以在启动App的时候传递一些额外的参数进去,覆盖系统的默认值,从而实现特定场景的调试。OptionsOptions这里的内容相对简单,但是却容易被忽略。CoreLocation用来模拟App的位置ApplicationData可以用于测试CoreData的Scheme迁移Ro...

2018-06-30 12:54:57

Safari/Chrome调试WebView

前言最近在写《iOS代码调试》系列的博客,估计会有十篇以上的内容,等到都写完了会在Github开源出来,欢迎关注我的Github:LeoMobileDeveloperWebView大多数App会选择H5去实现某些弱交互但是却需要热更新界面,这时候WebView就派上用场了,那么如何对WebView进行调试呢?Safari开启开发菜单Safari->偏好设置...

2018-06-17 21:51:07

深入理解Toll-Free Bridging

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

2018-04-26 15:28:28

iOS汇编精讲(上篇)

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

2018-04-21 12:11:32

Sqlite的事务,锁和WAL模式

前言事务定义了一组SQL语句的边界,这组SQL语句要么都执行,要么都不执行,事务保证了数据库完整性中的原子性。事务与数据库锁是紧密相关的,Sqlite用锁来保证事务的并发和执行顺序。事务在讲解事务的原理之前,我们先看看事务相关的API,主要有三个:begintransaction开始一个事务。其中,transaction可省略,直接写begin即可。rollback回...

2018-03-21 22:49:14

Objective C范型

范型范型编程是一种程序语言设计范式,它允许程序员在使用强类型的语言编写代码的时候,延迟确定具体的类型。以Swift代码为例,假如有一个需求是要交换两个int,很容易写出类似代码funcswapTwoInts(_a:inoutInt,_b:inoutInt){lettemporaryA=aa=bb=temporaryA}

2018-01-07 14:51:16

新年快乐

新年快乐

2017-12-31 21:33:10

Fishhook替换C函数的原理

FishhookFishhook是FaceBook出品的,可以用来HookC函数的一个开源库。它的主要接口就一个:structrebinding{constchar*name;//字符串名称void*replacement;//替换后的方法void**replaced;//原始的方法(通常要存储下来,在替换后的方法里调用)};//两个参数分别是rebindin

2017-11-04 16:17:48

深入理解iOS App的启动过程

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

2017-10-23 13:28:28

聊聊SQLite - 基础篇

SQLiteSQLite是一个关系型数据库,是一个嵌入式的数据库,它的核心代码由C编写,直接在宿主应用中运行。本来想一篇长文章涵盖想写的内容,最后发现想写的东西太多了,就拆分成:基础篇,原理篇和iOS应用篇发出来吧。MACOS的命令行字带SQLite。以下示例均在命令行中进行,CAPI的使用会在之后的文章里讲解:表在关系型数据库中,表是一组相关数据的集合,它包括行

2017-09-24 15:38:39

Moya的设计之道

前言Moya是一个基于Alamofire开发的,轻量级的Swift网络层。Moya的可扩展性非常强,可以方便的RXSwift,PromiseKit和ObjectMapper结合。如果你的项目刚刚搭建,并且是纯Swift的,非常推荐以Moya为核心去搭建你的网络层。另外,如果你对Alamofire的源码感兴趣,推荐我之前的一篇博客:Alamofire的设计之道Moya除了依赖Alamof

2017-08-11 13:44:52

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

前言网易云音乐是一款很优秀的音乐软件,我也是它的忠实用户。最近在研究如何更好的开发TableView,接着我写了一个Model驱动的小框架-MDTable。为了去验证框架的可用性,我选择了网易云音乐的首页来作为Demo,语言是Swift3。本文的内容包括:实现网易云音乐首页的思路如何建立一个轻量级的UITableViewController(不到100行)性能瓶颈原因以分析及如何优化到接

2017-07-28 14:38:34

理解网络分层与数据加密

网络分层网络的基础分层是OSI的七层架构:OSI的全称是OpenSystemInterconnection(开放系统互联模型),是由国际标准化组织ISO设计,解决不同体系结构网络互相连接的问题。实际应用中,五层架构是最常见的,也是最容易理解的:网络分层后,每一层都工作着不同的协议和实际的物理设备,下一层为上一层提供服务,上层的实现无需考虑下层的细节,相同层级之间进行相互通信。物理层

2017-07-22 20:29:34

博客专家

黄文臣

因吹斯汀
关注
  • iOS Team Leader
  • 中国 上海 浦东新区
奖章
  • 博客专家
  • 专栏达人