工作总结 六月 29, 2025

你不知道的 View Controller Containment

文章字数 10k 阅读约需 9 mins.

本文主要记录在工作过程中如何利用 View Controller Containment 来重构 UI 前言不知道你有没有经历过这样的情况,一个页面中有很多的 View,但各个 View 之间有明显的层级关系,这个时候一种可行的做法是把一系列相关联的 View 归到一个父亲 View 中。 但这种做法会有有一些其他的问题, 比如会让 View Controller 或者 View Mod... 查看全文

工作总结 六月 29, 2025

你不知道的 View Controller Containment

文章字数 10k 阅读约需 9 mins.

本文主要记录在工作过程中如何利用 View Controller Containment 来重构 UI 前言不知道你有没有经历过这样的情况,一个页面中有很多的 View,但各个 View 之间有明显的层级关系,这个时候一种可行的做法是把一系列相关联的 View 归到一个父亲 View 中。 但这种做法会有有一些其他的问题, 比如会让 View Controller 或者 View Model 比较大, 甚至有时候不得不把逻辑写在 View 里边。那么有没有一个既可以解决问题, 又不会引入更多棘手的问题的方法吗? 问得好! 如果你心里真的这个问题,那说明你一定是在质疑我写这篇分享的初衷。 不过别担心,看到最后我保证你一定会有所收获的。 背景铺垫了这么多,你可能会想: View Controller Containment 到底是什么个玩意,从来没听说过,确定会有人用这个吗? 但是接下来我会打消你的疑虑,因为苹果自己就在设计 UINavigationController 和 UITabBarController 利用了这种模式。在UINavigationController 和 ... 查看全文

会议报告 十一月 24, 2020

CreateML - 开启革命的星星之火

文章字数 6.5k 阅读约需 6 mins.

本文主要是苹果线上活动 - 基于 CreateML 的物体识别的观后感和一点想法。 背景Core ML 在 2017 年的横空出世开启了苹果机器学习的元年。但苹果貌似并没有准备在这条路上停下脚步,隔了仅仅一年,苹果就推出了 Create ML,之后苹果还在不断地给 Core ML 和 Create ML 添加新的功能,甚至在 XCode 11 之后将 Create ML 独立成为一个单独的 App。由此可见,苹果并不是拍拍脑袋或者搞搞 KPI(他们应该没有,只是为了押韵),他们是认真在考虑把 Machine Learning 移植到移动端,并且不断地在尝试去降低 Machine Learning 的门槛,让越来越多的开发正更方便的使用 Machine Learning 给自己的应用增砖添瓦。 什么是 Create ML关于 CreateML 网上有太多的介绍和教程,我只做一下简单的介绍,因为我再怎么努力也没办法比前人讲的更好更清楚,既然这样,那就站在巨人的肩膀上,大概讲一下我的认识。 苹果在 2016 年收购了 Turi Create,然后在此基础上发展出了 Create M... 查看全文

工作总结 七月 07, 2020

A song of TDD and BUG - 尾声

文章字数 655 阅读约需 1 mins.

TDD 与 BUG 的爱恨情仇(卷五),本系列链表头部请戳 A song of TDD and BUG - 前奏曲 结语与鸣谢感谢同事们(海春,超超等)在我迷茫的时候的帮助,感谢强哥对整个系列的 review 和宝贵意见。最后打个广告:落叶的一生就是为了归根吗?曾经的我也相信宿命论 - 程序员就是要 996 的,疫情是要被裁员的,出游是要自掏腰包的,五一是只有三天假的 … 仿佛死神与巴格达商人在萨拉马的相会,一切都是那么无力。直到我加入了猿辅导,我的世界观崩塌了:原来程序员也不一定非要 996,疫情期间会有更多的项目和机会,出游是公司掏钱,五一有九天假!从来没见过如此“不讲武德”的公司,说好的武林要以和为贵呢?你这样其他公司怎么活!那你还在等什么,加入我们,我的邮箱是 goupy@fenbi.com,内推我是认真的,你值得拥有更好的。 查看全文

工作总结 七月 07, 2020

A song of TDD and BUG - 变奏曲

文章字数 1.1k 阅读约需 1 mins.

TDD 与 BUG 的爱恨情仇(卷四),本系列链表头部请戳 A song of TDD and BUG - 前奏曲 All About Change劝分不劝和Dependency Map历史代码 TDD 改造需要注意的问题Start SmallChoose Your BattleField记得写单测并不是你的目的,减少 Bug 才是,所以我们需要把有限的精力放在收益最大的单侧上。我推荐两种选择写单测优先级的方案: 利用时间局部性:就像 LRU 的思想一下,在最近一段时间修改过的逻辑很有可能在未来一段时间内也需要修改,所以选择用单侧保证这部分逻辑有助于之后的迭代和重构。 “从”新开始:主意是从新,不是重新,也就是暂时考虑放弃之前的逻辑,对新业务使用 TDD 的开发模式来开发。这种比较适合没有时间对老代码进行重构和改造的情况,先对新的业务进行单测,等到业务稳定以后再考虑之前的历史包袱。 查看全文

工作总结 七月 07, 2020

A song of TDD and BUG - 副歌

文章字数 7.6k 阅读约需 7 mins.

TDD 与 BUG 的爱恨情仇(卷三),本系列链表头部请戳 A song of TDD and BUG - 前奏曲 副歌不副,FTDD 不 F可能你在想,不是 A song of TDD and BUG 吗?怎么都到了副歌部分了,还没怎么说 TDD。这个可能就要怪我们民国的大师们把 Chorus 翻译成副歌了,明明是最高潮的部分,翻译成副歌总给人一种莫名其妙的感觉,不过也可能是我乐理不精对大师的翻译没有深刻理解导致的。那吐槽吐完,开始讲正事,之前有给过大家一个强烈但不失友善的警告大家应该还记得吧,不记得的可以去复习一下 A song of TDD and BUG - 主歌。那会我说过适合自己的才是最好的,俗话说的好,规则就是用来打破的,只要我们了解了 TDD 的真谛,就可以把它改造成最适合自己的开发模式,我把这些 TDD 的变种们称为 FTDD。那何谓 FTDD,这个多出来的 F 代表什么?其实就是 Fu..,不好意思,是 Fake,也就是“伪 TDD”。那为什么说 FTDD 不 F 呢?因为这个“伪”并不是真正意义上的伪,而是结合了自己对 TDD 的理解和实践的产物,也可以... 查看全文

工作总结 七月 07, 2020

A song of TDD and BUG - 主歌

文章字数 45k 阅读约需 41 mins.

TDD 与 BUG 的爱恨情仇(卷二),本系列链表头部请戳 A song of TDD and BUG - 前奏曲 FBI Warning我知道你在想啥,但是你想多了,我只是想给你一个强烈但不失友善的警告(Friendly But Intense Warning)而已。在了解 TDD 之前你需要知道,TDD 只是一种开发模式,不是圣经也不是行为准则,我们需要辩证的去看待 TDD,可以参照 TDD 并且结合自己的实际情况选择最适合自己的开发模式,毕竟适合自己的才是最好的。这你可能会问了,刚你还说 TDD 又是最耀眼的新星,又是救世主的,现在咋又说人家坏话。我想说的是,你毕竟还是 Too Young,要我不进行一波商业吹嘘,你可能也不愿意往下看啊,流量称王的时代,我不得忽悠你多看几眼啊。 什么代码需要写单测并不是所有的代码都需要你写单测来保证的,总结起来就是“三个不一个要”: 不给自动生成的代码写 Unit Test(比如生成的 getter setter),我们要相信 Xcode(或者其他编辑器),出了问题是天灾,需要我们单独分情况处理,然后给我们自己处理的代码写单测。 不给... 查看全文

工作总结 六月 14, 2020

A song of TDD and BUG - 前奏曲

文章字数 4.6k 阅读约需 4 mins.

TDD 与 BUG 的爱恨情仇(卷一) 前言这是最好的时代,TDD 的出现终结了 BUG 横行的蛮荒,从此 Coding 世界进入了秩序与光明;这也是最坏的时代,历史的包袱,无尽的重构,博弈与妥协充斥在每个角落。从电脑和编程出现之初 Bug 就如影随形,那只飞到 Mark II 上的 Bug 穿越了大半个世纪,仍是程序员们在梦中惊醒,在镜前流泪的主要原因。那 Bug 为什么会出现?有没可能消除 Bug? 这是个哲学问题。 Bug的相对性原理有人说 Bug 是一个 Human Error,是可以通过一定的约定,准则和谨慎去避免的。的确, Bug 的多少很大程度上是程序员的谨慎程度来决定的。但是,我先把我的结论放在这, Bug 是无法避免的,也就是说他是一个在排除了人为错误之外的系统性的存在。 这听起来很像给自己开脱(其实就是给自己开脱),但是我是有理(狡)论(辨)支持的。比如之前有人提出来过抽象漏洞定律来解释这个问题,但是这个太笼统,听起来也太抽象,我想用自己的理解来解释一下。首先我们需要定义 Bug 是什么,维基百科中 Bug 的定义是程序错误。我们在这给它一个更明确,更有意... 查看全文

学习笔记 四月 26, 2020

都是 Apple 惹的祸 - Coordinator Pattern 的前世今生

文章字数 1.3k 阅读约需 1 mins.

本文主要记录在学习 Coordinator Pattern 是的心得。 前言最近工作中需要对一个升级 B 端的项目,本来只是更新 UI,对 H5 进行支持的简单工作,但是我灵机一动(用大脑一抽可能更好一点),决定对项目进行一次重构,目标 MVVM-C。对于 MVVM 可能大家了解的比较多,但是后边那个小 C 是什么可能有些小朋友并不是特别清楚。这种时候,从小就开始训练的阅读理解能力就派上用场了,看一眼文章题目你就知道这个 C 代表什么了。什么? CyberHex?虽然我很开心,但是我替你们的语文老师伤心三秒,1,2,3,好了。其他人应该都猜对了,对!就是 Coordinator。那到底什么 Coordinator 的设计模式?它是怎么产生的?它解决了什么痛点?接下来我就带大家走进 Coordinator 的内心,从而对它有一个更深的了解。 背景从文章题目“都是 Apple 惹的祸”你可能已经看到了一些问题的端倪,没错,Coordinator Pattern 的出现就是为了弥补苹果在设计 UIKit 的时候的一些疏忽(不知道是有意还是无意的)。多年前一个风雨交加,电闪雷鸣的夜晚,... 查看全文

学习笔记 十一月 27, 2018

iOS 中的并发性问题

文章字数 11k 阅读约需 10 mins.

本文主要记录在学习 iOS 的过程中关于并发性的问题。 前言之前在开发过程中曾经遇到过挺多次并发的问题,比如在自己写 networking 代码的时候会遇到一些(对!我是自己手写 networking code, 老板禁止使用 Alamofire, 所以我就自己写了一个很小的库,以后有机会跟大家分享),但都是比较皮毛的东西,感觉自己并没有深入理解并发行的问题,现在下定决心好好研究一下并发性,毕竟面试会考挺多而且以后也会碰到很多。 背景现在很多事情都是多线的,电脑是多核的,手机是双卡双待的,你看我,我可以一边写博客,一边玩LOL(呃,不知道为什么就抄袭了爱情公寓的台词,不过好像有点讽刺)。其实我是想说,由于现在手机是多核的,意味着同一时间手机可以同时处理多个问题,于是很多现代操作系统比如 iOS 和 OS10 就利用利用了这个特点而使用多线程。在这里我就想提出一个千古难题,进程和线程的区别是啥,说实话,到今天之前我对这两个概念还是比较模糊。进程的定义是正在执行程序的一个实体,线程定义是程序的执行路径。简而言之,在 iOS 系统中,进程可以理解为就是一个 App, 而线程是程序执... 查看全文
加载更多
0%