iOS开发详解
文章平均质量分 90
那些iOS开发中常用的技术
黄文臣
这个作者很懒,什么都没留下…
展开
-
性能深度分析之SystemTrace
前言App中大多数的性能指标都和时间相关,如启动速度,列表滑动FPS,页面打开耗时等等。为了优化这些指标,我们需要了解时间都消耗在哪里。通常我们会打开Time Profiler,通过聚合Call Stack来分析和优化代码耗时。偶尔会出现优化后Time Profiler已经没有什么高耗时的Call Stack,但列表滑动仍然掉帧,这时候应该怎么办呢?不妨试试System Trace~一个实...原创 2020-03-08 19:12:00 · 6632 阅读 · 7 评论 -
深入理解Symbol
这里是引用前言符号(Symbol)是日常开发中经常接触的一个概念,虽然日常开发中直接应用的场景比较少,但符号编译期和运行时都扮演了重要的角色。符号是什么维基百科的定义A symbol in computer programming is a primitive data type whose instances have a unique human-readable form....原创 2019-11-30 23:02:55 · 7092 阅读 · 2 评论 -
深入浅出iOS编译
前言两年前曾经写过一篇关于编译的文章《iOS编译过程的原理和应用》,这篇文章介绍了iOS编译相关基础知识和简单应用,但也很有多问题都没有解释清楚:Clang和LLVM究竟是什么源文件到机器码的细节Linker做了哪些工作编译顺序如何确定头文件是什么?XCode是如何找到头文件的?Clang Module签名是什么?为什么要签名为了搞清楚这些问题,我们来挖掘下XCode编译iO...原创 2018-12-23 20:59:26 · 19701 阅读 · 8 评论 -
聊聊AppDelegate解耦
AppDelegate在iOS开发中,AppDelegate指的是UIApplicationDelegate,用来处理App层面的事件,包括生命周期变化,OpenURL,处理HandOff和Intent等。每个iOS都有一个入口函数main,其中的一个参数就是AppDelegate:int main(int argc, char *argv[]){ @autoreleasep...原创 2018-08-12 18:52:46 · 26862 阅读 · 1 评论 -
实现一个优雅的iOS事件总线
目标订阅登录事件LoginEvent,当self dealloc时候自动取消订阅[QTSub(self, LoginEvent) next:^(LoginEvent *event) {}];订阅通知NSNotification,当self dealloc的时候自动取消订阅//订阅通知name[QTSubNoti(self,"name") next:^(NSNotifi...原创 2018-07-12 22:33:40 · 7486 阅读 · 7 评论 -
深入理解Toll-Free Bridging
前言Toll-Free Bridging本身不是什么新技术,那为什么还要写这篇博客呢?原因是今天和一个同事讨论到相关问题的时候,发现理解并不够深入,于是仔细研究了下,整理成了这篇博客。本文的Github地址:LeoMobileDeveloperToll-Free Bridging是什么?摘自文档: There are a number of data types i...原创 2018-04-26 15:28:28 · 4399 阅读 · 4 评论 -
Objective C范型
范型范型编程是一种程序语言设计范式,它允许程序员在使用强类型的语言编写代码的时候,延迟确定具体的类型。以Swift代码为例,假如有一个需求是要交换两个int,很容易写出类似代码func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temporaryA = a a = b b = temporaryA}原创 2018-01-07 14:51:16 · 3078 阅读 · 0 评论 -
深入理解iOS App的启动过程
前言 启动时间是衡量应用品质的重要指标。本文首先会从原理上出发,讲解iOS系统是如何启动App的,然后从main函数之前和main函数之后两个角度去分析如何优化启动时间。准备知识Mach-O哪些名词指的是Mach-oExecutable 可执行文件Dylib 动态库Bundle 无法被连接的动态库,只能通过dlopen()加载Image 指的是Executable,Dylib或者Bun原创 2017-10-23 13:28:28 · 26871 阅读 · 23 评论 -
Moya的设计之道
前言 Moya是一个基于Alamofire开发的,轻量级的Swift网络层。Moya的可扩展性非常强,可以方便的RXSwift,PromiseKit和ObjectMapper结合。如果你的项目刚刚搭建,并且是纯Swift的,非常推荐以Moya为核心去搭建你的网络层。另外,如果你对Alamofire的源码感兴趣,推荐我之前的一篇博客:Alamofire的设计之道 Moya除了依赖Alamof原创 2017-08-11 13:44:52 · 8871 阅读 · 21 评论 -
实现60fps的网易云音乐首页
前言网易云音乐是一款很优秀的音乐软件,我也是它的忠实用户。最近在研究如何更好的开发TableView,接着我写了一个Model驱动的小框架 - MDTable。为了去验证框架的可用性,我选择了网易云音乐的首页来作为Demo,语言是Swift 3。本文的内容包括:实现网易云音乐首页的思路如何建立一个轻量级的UITableViewController(不到100行)性能瓶颈原因以分析及如何优化到接原创 2017-07-28 14:38:34 · 5711 阅读 · 6 评论 -
优雅的开发TableView
前言UITableView(UITableViewController)是iOS开发使用频率最高的一个组件。不管是使用UITableView还是还是UITableViewController,在开发的时候,我们都需要实现两个协议:UITableViewControllerDataSourceUITableViewControllerDelegate这两个协议的代码不是写在Controller里原创 2017-06-19 11:57:34 · 7147 阅读 · 8 评论 -
MVVM与Controller瘦身实践
前言MVC是一个做iOS开发都知道的设计模式,也是Apple官方推荐的设计模式。实际上,Cocoa Touch就是按照MVC来设计的。这里,我们先不讲MVC是什么,我们先来谈谈软件设计的一些原则或者说理念。在开发App的时候,我们的基本目标有以下几点:可靠性 - App的功能能够正常使用健壮性 - 在用户非正常使用的时候,app也能够正常反应,不要崩溃效率性 - 启动时间,耗电,流量,界面反应原创 2017-06-12 11:20:19 · 11195 阅读 · 6 评论 -
Alamofire的设计之道
前言:Alamofire是一个由Swift编写的优雅的网络开发框架。大部分用Swift编写的iOS App的网络模块都是基于Alamofire的。作为Swift社区最活跃的几个项目之一,有许多开发者在不断的对其进行完善,所以学习这种优秀的开源代码对深入理解Swift的特性很有帮助。原创 2017-06-03 18:54:52 · 12682 阅读 · 3 评论 -
消息转发机制与Aspects源码解析
前言最近在搞重构相关的事情,遇到了不少这样的场景: 进入一个界面,在viewWillAppear:的时候做相应判断,如果满足条件则执行对应代码。这类业务有一个特点,业务内容是对应整个App的,与对应的ViewController毛关系都没有,但是却不得不耦合到(即使是调用代码可以精简到一行)ViewController中。我们都知道,这种类似的业务用AOP(面向切片编程)来做十分适合,所谓面向原创 2017-05-22 22:55:51 · 4275 阅读 · 2 评论 -
Objective C block背后的黑魔法
前言block在Objective C开发中应用非常广泛,我们知道block会捕获外部对象,也知道使用block要防止循环引用。那么block这套机制在Objective C中是如何实现的呢?本文通过从C/C++到汇编层面分析block的实现原理。Clangclang是XCode的编译器前端,编译器前端负责语法分析,语义分析,生成中间代码(intermediate representation )。原创 2017-04-17 14:24:44 · 6588 阅读 · 4 评论 -
iOS自动化测试的那些干货
前言 如果有测试大佬发现内容不对,欢迎指正,我会及时修改。大多数的iOS App(没有持续集成)迭代流程是这样的也就是说,测试是发布之前的最后一道关卡。如果bug不能在测试中发现,那么bug 就会抵达用户,所以测试的完整性和可靠性十分重要。目前,大多数App还停留在人工测试阶段,人工测试投入的成本最低,能够保证核心功能的使用,而且测试人员不需要会写代码。但是,在很多测试场景下,人工测试的效率原创 2017-03-09 12:08:37 · 21091 阅读 · 3 评论 -
iOS 10越狱和Reveal 8分析三方App UI框架教程
前言这是一篇写给开发者的博客,如果碰巧非开发者搜到了这篇博客,那么博客的内容可能不适合你。其实网上Reveal的教程很多,但是很多都是停留在Reveal 1或者Reveal 2时代的博客,不太适合最新版本的Reveal 7,所以还是决定写这样一篇文章。本文最终的效果:淘宝首页:可以看到,淘宝首页其实就是一个巨大的CollectionView京东首页:可以看到,京东首页其实就是一个巨大的Tabl原创 2017-04-05 22:27:07 · 9440 阅读 · 3 评论 -
深入理解Objective C的ARC机制
从Runtime源码和汇编的角度深入挖掘ARC的本质原创 2017-04-11 09:05:35 · 5794 阅读 · 2 评论 -
iOS开发中常用的那些工具
工欲善其事,必先利其器。列表XCode 无须多说Instruments 性能分析工具:卡顿,内存,网络,数据存储等等xcodebuild and xcrun 命令行工具用来脚本打包和测试synx 把XCode工程中的Group自动映射到实际的文件夹oclint 静态分析Objetive C代码,发现隐藏问题xctool 基于xcodebuild的扩展,更方便的使用命令行测试Char原创 2017-02-23 21:17:52 · 7880 阅读 · 0 评论 -
iOS编译过程的原理和应用
前言一般可以将编程语言分为两种,编译语言和直译式语言。像C++,Objective C都是编译语言。编译语言在执行的时候,必须先通过编译器生成机器码,机器码可以直接在CPU上执行,所以执行效率较高。像JavaScript,Python都是直译式语言。直译式语言不需要经过编译的过程,而是在执行的时候通过一个中间的解释器将代码解释为CPU可以执行的代码。所以,较编译语言来说,直译式语言效率原创 2016-12-10 11:58:12 · 34383 阅读 · 10 评论 -
NSProxy与消息转发机制
来自Leo的原创博客,转载请著名出处我的StackOverflow我的Github,欢迎Follow https://github.com/LeoMobileDeveloper前言NSProxy是iOS开发中一个消息转发的基类,它不继承自NSObject。因为这个类不太常用,所以对于很多开发者来说根本没有用过它。不过,这个类对于iOS开发还是很有用的。本文首先会讲解下这个类的基础,然后讲解下消息转原创 2016-08-23 10:26:09 · 5152 阅读 · 3 评论 -
iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)
原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用。例如:point,line,Arc(圆弧),Curves(曲线),Ellipse(椭圆),矩形(Rectangle).对原创 2015-10-22 13:55:34 · 5082 阅读 · 0 评论 -
iOS 2D绘图详解(Quartz 2D)之概述
原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow前言:最近在研究自定义控件,由于想要彻底的定制控件的视图还是要继承UIView,虽然对CALayer及其子类很熟练,但是对Quartz 2D这个强大的框架仍然概念模棱两可。于是,决定学习下,暂定7篇文章讲解,会写一些Demo。 官方文档本文的原创 2015-10-21 11:55:14 · 5221 阅读 · 2 评论 -
iOS SDK详解之视频播放(AVPlayer)附Demo
原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow 前言 最近在研究视频播放,所以研究了下这个类,学习的过程中写了个简单的Demo,这里写出来分析给想要的人呢。实现了透明的导航栏屏幕垂直的时候小屏幕/水平大屏幕之前的切换,支持屏幕旋转触发,按键触发重播播放/暂停显示播放进度隐藏原创 2015-10-12 20:25:04 · 14022 阅读 · 6 评论 -
iOS SDK详解之UITabbar(仿新浪微博的Demo)
原创blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=contents 欢迎关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html前言:UITabBarController和UINavigationController是大多数App选原创 2015-09-01 10:53:01 · 3172 阅读 · 0 评论 -
iOS SDK详解之UIToolBar
原创blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=contents 欢迎关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html前言:ToolBar是一个常用的UIKit控件,常用来放置评论,收藏,分享等功能。本文模仿今日头条 Ap原创 2015-08-19 17:24:41 · 3180 阅读 · 0 评论 -
iOS SDK详解之NSCopying协议
原创blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=contents 欢迎关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html前言:NSCopy协议是对对象进行拷贝的协议。Copy后的对象和原对象是两个对象,要分开考虑其生命周期。原创 2015-08-15 15:18:08 · 4215 阅读 · 1 评论 -
iOS SDK详解之NSCoding协议
原创blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=contents 欢迎关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html前言:NSCoding是对iOS中的Model类进行编码和解码必须要遵循的协议,如果一个对象要被归档,那么这个原创 2015-08-14 20:08:34 · 5484 阅读 · 0 评论 -
iOS Core Animation详解(四)AutoLayout中的动画
原创blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言:AutoLayout定义了View的位置,也就是说,在Auto Layout的工程里,如果不修改约束本身,在视图重新绘制的时候,还会回到最开始的位置原创 2015-08-06 20:40:33 · 4218 阅读 · 0 评论 -
iOS SDK详解之UIScreen
原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 不知不觉这个专栏已经写了45篇文章了,我想应该至少还有100篇吧。iOS开发的东西太多太多前言:UIScreen封装访问着硬件显示屏相关的信息。一个iOS设原创 2015-07-19 16:04:07 · 3134 阅读 · 0 评论 -
iOS 持久化存储之CoreData VS 直接SQlite
原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html前言:CoreData不是DB,也不是DBMS,它是一个对象图管理工具,它的底层存储使用SQLite,XML或者其它。通常使用CoreData的时候,也会用到原创 2015-07-12 11:03:01 · 9150 阅读 · 0 评论 -
iOS SDK详解之NSCalendar & NSDateComponents
原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 欢饮关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html前言:NSCalendar 和 NSDateComponents是有关iOS 时间相关API很重要的两个类。最近刚好用到,这里就整理下。概念NSCalend原创 2015-07-11 14:08:51 · 7834 阅读 · 0 评论 -
iOS NSAttributedString所有文本属性详解(多图)
原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html前言:这篇文章算是整理吧,因为最近逛Stackoverflow的时候,发现自己这部分掌握的不是很好。一个简单的例子绘制不同颜色不同字体的一个AttributeS原创 2015-07-02 22:14:12 · 24799 阅读 · 0 评论 -
iOS 单元测试之XCTest详解
原创blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS-SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html前言:测试是一个好的App不可缺少的部分。每一个App都是由一个个小的功能组合到一起的。而这些小的功能又是由一个个函数或者说算法组合到一起的。单元测试就是对这些原创 2015-06-28 13:51:08 · 25582 阅读 · 7 评论 -
iOS 多线程开发之OperationQueue(二)NSOperation VS GCD
原创Blog,转载请注明出处 blog.csdn.net/hello_hwc欢迎关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html前言:最近有点忙,所以这个月更新的博客数量有些下降,估计这个月和下个月博客更新的数量都在10篇左右。回到正题,本文会比较下GCD和NSOperation两种多线程的原创 2015-06-27 10:12:56 · 3581 阅读 · 0 评论 -
iOS 多线程开发之OperationQueue(一)概念+两种Operation
原创blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏,这里有很多基础的文章 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html前言:在iOS开发 中,多线程是一个很重要的一个方面。iOS的多线程使用可以分为几个方面。由底层到上层分别是pthreadNSThre原创 2015-06-09 14:51:47 · 4309 阅读 · 0 评论 -
iOS CoreData详解(七)性能相关
原创blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏,这里有很多基础的文章 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html前言:总的来说,CoreData的性能是很好的,尤其是对于数据量较小的App,但是CoreData很有可能会被滥用,导致App的性能下降。原创 2015-06-07 16:11:53 · 3808 阅读 · 0 评论 -
iOS CoreData详解(六)深入理解数据模型
原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 之前的五篇文章 1. 堆栈与基本概念 2. 基本操作 3. 与Tableview协作-NSFetchedResultController 4. CoreData原理Faulting and Uniquing 5. CoreData与多线程前言:Coredata是一个良好的对象图管理工具。那么对象图原创 2015-06-05 13:02:57 · 4491 阅读 · 0 评论 -
iOS SDK详解之UIDevice(系统版本,设备型号...)
原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏 blog.csdn.net/column/details/huangwenchen-ios-sdk.html前言:UIDevice是初学者很容易忽视的一个类。通过这个类的API可以很容易的获取到当前的设备信息,系统信息。没什么难度,本文会详细的阐述各个属性。本文的输出值都是在我的i原创 2015-06-02 11:47:57 · 4200 阅读 · 0 评论 -
iOS CoreData详解(五)多线程
原创blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏,这里有很多基础的文章 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html前言:很多小的App只需要一个ManagedContext在主线程就可以了,但是有时候对于CoreData的操作要耗时很久的,比如App开原创 2015-06-01 09:09:40 · 5859 阅读 · 0 评论