UIApplicationDelegate 中两个值得注意的地方
这个知识点可以用于面试,以及对于一些对初始化时机有要求的 SDK 配置的 bug 排查。 答案是会的,应用从 active 状态至 suspended 状态,是必须经过 background 状态的,我们应该按照官方规范,在 applicationDidEnterBackgro…
iOS监控 - 野指针定位
当所指向的对象被释放或者收回,但是对该指针没有作任何的修改,以至于该指针仍旧指向已经回收的内存地址,此情况下该指针便称野指针
iOS应用瘦身方法思路整理
前段时间注意到我们APP的包大小超过100MB了,所以随口跟吕老板说了下能否采用字体文件(.ttf)替代PNG图片,吕老板对应用瘦身很感兴趣因此让我做下技术调研。这篇文章主要是将我们的各个技术方案的思路做一下整理和总结,希望对大家有所帮助。
3 分钟搭建 App Store 动态审核开关
我曾经在一篇文章中写过,希望大家不要欺骗 App Store Review Team,但是近来的 Uber 审核事件,以及发生在我个人身上的 审核团队不对我的长篇详细辩解作正面回答,且无限期推迟我的 App 审核的事情发生后,我彻底对这个团队没有了尊重,作为能力有限的个人开发者…
从 YYCache 源码 Get 到如何设计一个优秀的缓存
本文将结合 YYCache 的源码逐步带大家找到答案。 YYCache 是一个线程安全的高性能键值缓存(该项目是 YYKit 组件之一)。YYKit 是在 2015 年发布到 Github 的,由于其代码质量很高,在短时间内就收获了大量的 Star(目前已经 1w+ Star …
iOS 多网络请求的线程安全
iOS 网络编程有一种常见的场景是:我们需要并行处理二个请求并且在都成功后才能进行下一步处理。下面是部分常见的处理方式,但是在使用过程中也很容易出错: DispatchGroup:通过 GCD 机制将多个请求放到一个组内,然后通过 DispatchGroup.wait() 和 …
一种避免 iOS 内存碎片的方法
在和服务器传输文本的时候,可能会因为某一个字符的编码格式不同、少了一个字节、多了一个字节等原因导致整段文本都无法解码。而实际上如果可以找到这个字符,然后替换成其他字符的话,那整段文本其他字符都是可以解码的,用户在UI上也许能猜测出正确的字符是什么,这种体验是好于用户看到一片空白…
浅析移动蜂窝网络的特点及其省电方案
蜂窝网络的架构类似于我们常见的蜂窝,是由一个个基站组成的蜂窝,理想状态中我们的蜂窝网络应该是下面这个样子的。当然,现实生活中网络资源分布并没有这么的均匀。 Wi-Fi 是一种无限局域网技术,Wi-Fi 信号需要有线网来提供,比如我们家里常用的宽带上网,就是将有线信号转换成 Wi…
我认为的 Runloop 最佳实践
关于 Runloop,这篇文章写的非常棒,深入理解RunLoop。我写这篇文章在深度上是不如它的,但是为什么还想写一下呢? Runloop 是一个偏门的东西,在我的工作经历中,几乎没有使用到它的地方,在我当时学习它时,因为本身对 iOS 整个生态了解不够,很多概念让我非常头疼。…
关于线上检测主线程卡顿的问题
大家好,第一次在掘金这个平台写东西。如有错误,希望指出。 关于runloop是什么我就不多说了,因为网上有很多关于这个的文章,最推荐的还是YYKit的作者博客上那篇。 PingConfig 只是我随便写的一个用来存储runloop的状态和信号量的自定义类,其中的结构如下:恩,只…
[译] Swift 上的高性能数组
对于日常应用开发,考虑数组性能是一件不会经常发生的事。如果你正在实现需要扩展的算法,也许高性能数组就能出现在你脑海中。也许你正在写更偏向于底层的代码,比如一个框架,这时任何的性能缺陷都会产生复合效应。当数组性能变得重要的时候,了解一些优化数组性能的方式也是很不错的。让我们来深入…
神奇的 BlocksKit (一)
本篇文章非常长,因为 BlocksKit 的实现还是比较复杂和有意的。这篇文章不是为了剖析 iOS 开发中的 block 的实现以及它是如何组成甚至使用的,如果你想通过这篇文章来了解 block 的实现,它并不能帮到你。
iPhone安装包的优化
这是一次安装包大小优化的实践。
随着业务的增加,工程中引入越来越多的业务代码和第三方库, 整个安装包越来越大。以今日头条5.7.5为例 最近几个版本的ipa大小如下: 5.7 -> 72.2M (+0.8M) 正常业务增量 5.6 -> 71.4M (+14M) 主要原因:接…
如何提高代码的可读性? - 读《编写可读代码的艺术》
一. 为什么读这本书 很多同行在编写代码的时候往往只关注一些宏观上的主题:架构,设计模式,数据结构等等,却忽视了一些更细节上的点:比如变量如何命名与使用,控制流的设计,以及注释的写法等等。以上这些细节上的东西可以用代码的可读性来概括。 不同于宏观上的架构,设计模式等需要好几个类…
YYCache 设计思路 | Garan no dou
iOS 开发中总会用到各种缓存,最初我是用的一些开源的缓存库,但到总觉得缺少某些功能,或某些 API 设计的不够好用。YYCache (https://github.com/ibireme/YYCache) 是我新造的一个轮子,下面说一下这个轮子的设计思路。
玩转iOS开发:实战开发中的GCD Tips小技巧 (一)
看到结果, 挂了, 为什么呢? 按道理来说, 外部是异步, 而里面是同步是不会卡死的, 其实在之前的文章里我们就提到过. 1.要么把第二个任务变成异步执行. 2.要么把两个任务都变成异步执行. PS: 这里不要在同步执行嵌套串行队列, 哪怕你是分开小方法里也是一样的. 之前我们…
iOS App 启动时间优化
iOS App 启动时间优化
玩转iOS开发:实战开发中的GCD Tips小技巧 (二)
上一篇, 我们简单的讲了一些使用GCD的小技巧, 如果没有看的朋友, 可以去玩转iOS开发:实战开发中的GCD Tips小技巧 (一)看. 这次, 我们继续讲解小技巧. 这样子, 我们就可以把这个网络请求给打包起来, 但这里要注意一下, 不能同时调用两个dispatch_gro…
iOS应用程序性能管理(APM)
iOS应用程序性能管理(APM)
【译】处理 iOS 中复杂的 Table Views 并保持优雅
Table views 是 iOS 开发中最重要的布局组件之一。通常我们的一些最重要的页面都是 table views:feed 流,设置页,条目列表等。 每个开发复杂的 table view 的 iOS 开发者都知道这样的 table view 会使代码很快就变的很粗糙。这样…