iOS进阶
文章平均质量分 93
黄文臣
这个作者很懒,什么都没留下…
展开
-
聊聊应用内购买
前言上一份工作中,断断续续开发和维护了两年左右的内购,换工作后短期内应该不会做相关业务了,所以趁着“记忆”还是热乎的,写下这篇文章。希望读者通过阅读本文能够解决一些问题或者找到一些产品灵感,本文主要包括三个方面:内购的基本概念;代码层面如何开发,坑和对应的解决方案;应用审核和后续运营的注意事项;友情提示:本文很长~授之以渔以下官方资料,建议开发内购的同学静下心来通读一遍,能避免...原创 2019-04-21 23:04:31 · 20170 阅读 · 9 评论 -
Moya的设计之道
前言 Moya是一个基于Alamofire开发的,轻量级的Swift网络层。Moya的可扩展性非常强,可以方便的RXSwift,PromiseKit和ObjectMapper结合。如果你的项目刚刚搭建,并且是纯Swift的,非常推荐以Moya为核心去搭建你的网络层。另外,如果你对Alamofire的源码感兴趣,推荐我之前的一篇博客:Alamofire的设计之道 Moya除了依赖Alamof原创 2017-08-11 13:44:52 · 8887 阅读 · 21 评论 -
优雅的开发TableView
前言UITableView(UITableViewController)是iOS开发使用频率最高的一个组件。不管是使用UITableView还是还是UITableViewController,在开发的时候,我们都需要实现两个协议:UITableViewControllerDataSourceUITableViewControllerDelegate这两个协议的代码不是写在Controller里原创 2017-06-19 11:57:34 · 7187 阅读 · 8 评论 -
MVVM与Controller瘦身实践
前言MVC是一个做iOS开发都知道的设计模式,也是Apple官方推荐的设计模式。实际上,Cocoa Touch就是按照MVC来设计的。这里,我们先不讲MVC是什么,我们先来谈谈软件设计的一些原则或者说理念。在开发App的时候,我们的基本目标有以下几点:可靠性 - App的功能能够正常使用健壮性 - 在用户非正常使用的时候,app也能够正常反应,不要崩溃效率性 - 启动时间,耗电,流量,界面反应原创 2017-06-12 11:20:19 · 11241 阅读 · 6 评论 -
优雅的开发Swift和Objective C混编的Framework
前言为什么要写这样一篇文章,因为昨天和一个朋友讨论到Swift和Objective C如何混合开发Framework,中途发现了很多有意思的坑。用Swift封住哪个OC的库是一件比较常见的事情,毕竟对于大多数公司来说,老的代码都是用OC写的,而且经过多次迭代,这些OC的代码已经被验证了是稳定的,用Swift重写代价太大。这就引入了一个需求:用Swift和OC来混编一个Framework。如果你之原创 2017-03-02 16:41:58 · 14301 阅读 · 18 评论 -
Alamofire的设计之道
前言:Alamofire是一个由Swift编写的优雅的网络开发框架。大部分用Swift编写的iOS App的网络模块都是基于Alamofire的。作为Swift社区最活跃的几个项目之一,有许多开发者在不断的对其进行完善,所以学习这种优秀的开源代码对深入理解Swift的特性很有帮助。原创 2017-06-03 18:54:52 · 12782 阅读 · 3 评论 -
iOS 10越狱和Reveal 8分析三方App UI框架教程
前言这是一篇写给开发者的博客,如果碰巧非开发者搜到了这篇博客,那么博客的内容可能不适合你。其实网上Reveal的教程很多,但是很多都是停留在Reveal 1或者Reveal 2时代的博客,不太适合最新版本的Reveal 7,所以还是决定写这样一篇文章。本文最终的效果:淘宝首页:可以看到,淘宝首页其实就是一个巨大的CollectionView京东首页:可以看到,京东首页其实就是一个巨大的Tabl原创 2017-04-05 22:27:07 · 9478 阅读 · 3 评论 -
消息转发机制与Aspects源码解析
前言最近在搞重构相关的事情,遇到了不少这样的场景: 进入一个界面,在viewWillAppear:的时候做相应判断,如果满足条件则执行对应代码。这类业务有一个特点,业务内容是对应整个App的,与对应的ViewController毛关系都没有,但是却不得不耦合到(即使是调用代码可以精简到一行)ViewController中。我们都知道,这种类似的业务用AOP(面向切片编程)来做十分适合,所谓面向原创 2017-05-22 22:55:51 · 4312 阅读 · 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 · 6661 阅读 · 4 评论 -
实现60fps的网易云音乐首页
前言网易云音乐是一款很优秀的音乐软件,我也是它的忠实用户。最近在研究如何更好的开发TableView,接着我写了一个Model驱动的小框架 - MDTable。为了去验证框架的可用性,我选择了网易云音乐的首页来作为Demo,语言是Swift 3。本文的内容包括:实现网易云音乐首页的思路如何建立一个轻量级的UITableViewController(不到100行)性能瓶颈原因以分析及如何优化到接原创 2017-07-28 14:38:34 · 5745 阅读 · 6 评论 -
Fishhook替换C函数的原理
FishhookFishhook是FaceBook出品的,可以用来Hook C函数的一个开源库。它的主要接口就一个:struct rebinding { const char *name; //字符串名称 void *replacement; //替换后的方法 void **replaced; //原始的方法(通常要存储下来,在替换后的方法里调用)};//两个参数分别是rebindin原创 2017-11-04 16:17:48 · 6567 阅读 · 1 评论 -
深入理解iOS App的启动过程
前言 启动时间是衡量应用品质的重要指标。本文首先会从原理上出发,讲解iOS系统是如何启动App的,然后从main函数之前和main函数之后两个角度去分析如何优化启动时间。准备知识Mach-O哪些名词指的是Mach-oExecutable 可执行文件Dylib 动态库Bundle 无法被连接的动态库,只能通过dlopen()加载Image 指的是Executable,Dylib或者Bun原创 2017-10-23 13:28:28 · 27029 阅读 · 23 评论 -
深入浅出iOS编译
前言两年前曾经写过一篇关于编译的文章《iOS编译过程的原理和应用》,这篇文章介绍了iOS编译相关基础知识和简单应用,但也很有多问题都没有解释清楚:Clang和LLVM究竟是什么源文件到机器码的细节Linker做了哪些工作编译顺序如何确定头文件是什么?XCode是如何找到头文件的?Clang Module签名是什么?为什么要签名为了搞清楚这些问题,我们来挖掘下XCode编译iO...原创 2018-12-23 20:59:26 · 19804 阅读 · 8 评论 -
iOS 性能优化 - Allocations分析内存分配
AllocationsAllocations用来分析静态内存分配。Demo项目Demo AppDemo是一个简单的图片应用:首页只有一个简单的入口;次级页面会读取本地页面,加滤镜,然后按照瀑布流的方式显示出来;第三个页面提供大图显示;运行代码:点击Photos -> 进入main -> 点击一张图,进入详情页 -> Pop直到回到第一个页面,重复这段操作,从XCode...原创 2018-10-21 14:45:24 · 7397 阅读 · 1 评论 -
聊聊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 · 26894 阅读 · 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 · 7543 阅读 · 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 · 4478 阅读 · 4 评论 -
iOS汇编精讲(上篇)
前言日常的应用开发中,主要用的语言是Objective(Swift),一些特殊场景下,可能还会用到C/C++,JavaScript,Shell,Python等。那么,一个iOS开发者为什么要了解汇编这么底层的语言呢? 因为看得懂汇编能够提高的代码调试和逆向能力。本文是作者学习汇编过程中整理的笔记,分为上下两篇:上篇主要是一些基础准备,下篇介绍Objective C汇编和一些逆...原创 2018-04-21 12:11:32 · 6785 阅读 · 7 评论 -
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 · 3115 阅读 · 0 评论 -
iOS编译过程的原理和应用
前言一般可以将编程语言分为两种,编译语言和直译式语言。像C++,Objective C都是编译语言。编译语言在执行的时候,必须先通过编译器生成机器码,机器码可以直接在CPU上执行,所以执行效率较高。像JavaScript,Python都是直译式语言。直译式语言不需要经过编译的过程,而是在执行的时候通过一个中间的解释器将代码解释为CPU可以执行的代码。所以,较编译语言来说,直译式语言效率原创 2016-12-10 11:58:12 · 34539 阅读 · 10 评论 -
深入理解Objective C的ARC机制
从Runtime源码和汇编的角度深入挖掘ARC的本质原创 2017-04-11 09:05:35 · 5844 阅读 · 2 评论 -
使用Instrument调试界面卡顿
来自Leo的原创博客,转载请著名出处我的StackOverflow我的Github,欢迎Follow https://github.com/LeoMobileDeveloper前言工欲善其事,必先利其器。Instrument对于iOS开发来说,是发现并且解决问题的一把利器。本文会用到的两个工具包括:Time Profiler(获取代码运行时间,一般用来看CPU占用)Core Animation原创 2016-08-26 20:43:55 · 13155 阅读 · 0 评论 -
iOS 为CALayer添加可动画的属性(以二维码切换扫描区域为例)
原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow我的Github https://github.com/LeoMobileDeveloper 前言:当我们去修改一个CALayer的属性的时候,通常是会自动创建渐变的动画。但是,很多时候,默认的属性并不能满足我们的要求,我们希望自定义的属原创 2016-01-15 11:30:24 · 3414 阅读 · 2 评论 -
Swift 代码调试核武-LLDB调试基础
原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow前言:LLDB是个开源的调试器,与XCode绑定的LLDB的使用中,Swift与Objective C还是有一些差别的本文主要侧重LLDB的常用命令资料(目前状态XCode 7.2 Swift 2.1.1),非XCode 7.2+本文代码可能不原创 2016-01-10 14:55:23 · 3864 阅读 · 1 评论 -
iOS 如何调试第三方统计到的崩溃报告
原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow前言:App上线四个月了,陆陆续续也在友盟上收到一些崩溃报告。这里就写一篇博客,简单介绍下如何debug。有一点要记住,不要指望着复现bug靠断点调试,有些bug,例如多线程引起的,很难复现核心命令dwarfdump --lookup 0x00原创 2015-11-25 14:23:09 · 7014 阅读 · 0 评论 -
Swift线程安全详解-概念,三种锁,死锁,Atomic,synchronized
原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow 前言:最近app中的日历小概率的在currentCalendar这个方法崩溃,看了下call tree。研究了下,是线程安全问题。这里,就系统性的总结下线程安全这部分。之后的博客绝大部分源码会用Swift来写了。一些资料objc原创 2015-11-26 14:22:59 · 12977 阅读 · 0 评论 -
iOS SDK详解之Runloop
原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow前言:Runloop多线程开发的中的一个概念,当然也可以向Runloop中提交一些任务,监听一些事件。属于多线程编程的一部分,合理的使用Runloop对App的性能提高有很大帮助。关于Runloop 的官方资料笔者也是主要从三个链接中理解和概括原创 2015-11-23 15:03:30 · 2604 阅读 · 1 评论 -
iOS Runtime应用实例(二)method swizzling(方法交叉)
原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow本博客关于Runtime的博客链接iOS Runtime应用实例(一)类别添加属性 iOS Runtime详解(消息机制,类元对象,缓存机制,消息转发) iOS Runtime详解之SEL,Class,id,IMP,_cmd,isa,m原创 2015-11-12 11:10:48 · 2482 阅读 · 0 评论 -
iOS Runtime应用实例(一)类别添加属性
原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow 前言:类别添加属性是Runtime最常见的一个应用。也是个人用的比较多的,前段时间有个需求是要求统计App中的每个控件被点击的次数,虽然友盟能做,不过我们希望统计更加详细,这样就要自己开发一个统计分析的SDK了。每个控件要打一个标签,这时原创 2015-11-10 10:45:57 · 4010 阅读 · 0 评论 -
iOS Runtime详解(消息机制,类元对象,缓存机制,消息转发)
原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow前言:之前一篇文章里,我详细的讲解了一些基本关键词以及基本概念,这里再简要列出来,以防有些同学看不懂。SEL 方法的名字,可以理解为字符串指针类型id 指向一个类的实例对象isa 每个类的示例对象都保存的指针,指向类对象Class 指向原创 2015-11-09 15:02:41 · 9055 阅读 · 3 评论 -
iOS 21种设计模式之原型模式Prototype
原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow感谢感谢《Pro Objective-C Design Pattern for iOS》一书,这个博客系列由很多灵感源自次书。同时,也感谢Wiki以及一些博客博主。每篇文章最后,都会列出参考链接。这个设计模式系列的文章对象创建模式 工厂抽原创 2015-12-21 23:08:34 · 2652 阅读 · 0 评论 -
AutoLayout进阶篇
来自Leo的原创博客,转载请著名出处我的StackOverflow前言AutoLayout用来布局已经不是什么新鲜事了,我之前也写过三篇入门的文章IB 自动生成IB拖拽代码实现当然,实际开发中,如果是多人协同开发,基本上是弃用Storyboard和XIB文件的。因为这两种文件本质上是XML,多人协同开发一起修改这样的大XML是一件很蛋疼的事情。所以,大部分时候,Layout约束都是纯代码实现原创 2016-06-04 15:30:33 · 11682 阅读 · 0 评论 -
实现像网易新闻那样全屏push/pop
来自Leo的原创博客,转载请著名出处我的StackOverflow我的Github https://github.com/LeoMobileDeveloper目标效果全屏幕左滑-进行导航交互式推出全屏幕右滑-进行导航交互式推入修改默认的导航栏push/Pop牢骚几句 本来想着用两种方式:继承UINavigationController和用Runtime动态修改UINavigationC原创 2016-06-26 21:43:59 · 8044 阅读 · 0 评论 -
经验之谈-2016年送审App Store两次被拒
最近一次被拒,API命名与私有冲突 Performance - 2.5.1 Your app uses or references the following non-public APIs: applyBlurWithRadius:tintColor:saturationDeltaFactor:maskImage:, requestURL The use o原创 2016-09-29 09:04:24 · 4008 阅读 · 0 评论 -
iOS开发中常用的那些工具
工欲善其事,必先利其器。列表XCode 无须多说Instruments 性能分析工具:卡顿,内存,网络,数据存储等等xcodebuild and xcrun 命令行工具用来脚本打包和测试synx 把XCode工程中的Group自动映射到实际的文件夹oclint 静态分析Objetive C代码,发现隐藏问题xctool 基于xcodebuild的扩展,更方便的使用命令行测试Char原创 2017-02-23 21:17:52 · 7891 阅读 · 0 评论 -
iOS自动化测试的那些干货
前言 如果有测试大佬发现内容不对,欢迎指正,我会及时修改。大多数的iOS App(没有持续集成)迭代流程是这样的也就是说,测试是发布之前的最后一道关卡。如果bug不能在测试中发现,那么bug 就会抵达用户,所以测试的完整性和可靠性十分重要。目前,大多数App还停留在人工测试阶段,人工测试投入的成本最低,能够保证核心功能的使用,而且测试人员不需要会写代码。但是,在很多测试场景下,人工测试的效率原创 2017-03-09 12:08:37 · 21168 阅读 · 3 评论 -
NSProxy与消息转发机制
来自Leo的原创博客,转载请著名出处我的StackOverflow我的Github,欢迎Follow https://github.com/LeoMobileDeveloper前言NSProxy是iOS开发中一个消息转发的基类,它不继承自NSObject。因为这个类不太常用,所以对于很多开发者来说根本没有用过它。不过,这个类对于iOS开发还是很有用的。本文首先会讲解下这个类的基础,然后讲解下消息转原创 2016-08-23 10:26:09 · 5214 阅读 · 3 评论 -
实现一个复杂动画的界面转场(Swift)
效果图项目地址:ImageMaskTransition转场原理对于模态展示(Modal)iOS 8之后,可以通过设置ViewController的转场代理transitioningDelegate这个转场代理是一个协议类型UIViewControllerTransitioningDelegate.由于我们是非交互式转场,所以只需要实现协议的两个方法即可// MARK: - UIViewControl原创 2016-08-21 09:11:53 · 3484 阅读 · 0 评论 -
用Swift实现淘宝和大众点评的下拉刷新
来自Leo的原创博客,转载请著名出处我的StackOverflow我的Github https://github.com/LeoMobileDeveloper效果淘宝 大众点评 项目地址其中大众点评的下拉刷新用了50行左右代码淘宝的下拉刷新用了90行左右代码完整的代码地址:PullToRefreshKit Tips:用Swift 2.2写的,所以需要XCode 7.3来运行。 Pul原创 2016-07-15 16:28:50 · 5370 阅读 · 1 评论 -
RxSwift使用教程
前言RxSwift是Swift函数响应式编程的一个开源库,由Github的ReactiveX组织开发,维护。RxSwift的目的是让让数据/事件流和异步任务能够更方便的序列化处理,能够使用Swift进行响应式编程目前,RxSwift在Github上收到了5000+Star,600+fork。本文的目的介绍RxSwift的核心思想讲解RxSwift的基础使用介绍RxSwift的优点如果你有时间原创 2016-07-08 11:13:22 · 42433 阅读 · 1 评论