iOS 真机访问 sandbox 目录的各种姿势

我一直知道,要做成同一件事,程序员们的方式往往五花八门。所以这次就一个问题在微博上征集答案,果然得到了许多不同方案,和大家分享下。 平常调试一直有看日志的需要,我们一般将日志文件存放在 sandbox 的 Document 目录下,之前我如果要查看某台设备上的日志,一般是按如下两种方式: 方式一:使用 iTools,Mac 端的 iTools 可以访问真机 App 的完整目录,虽然 iO...

iOS weak 关键字漫谈

weak 关键字的运用在 iOS 当中属于基础知识,在面试的时候问 weak 的用处,就像两个 iOS 程序员见面寒暄问候一样普通了。 weak 的常见场景是在 delegate,block,NSTimer 中使用,以避免循环引用所带来的内存泄漏,这是教科书式的用法。 编程语言是工具,语言特性只是工具的特性,工具怎么用在于使用者。weak 关键字的方便之处绝不局限于避免循环引用,适当脑洞...

懒惰三问

在偷懒这件事上,我们人类是绝不会偷懒的。 我时常在想,为什么懒惰会是我们的天性,为何造物主会将其编入我们的基因序列。如果人人都勤快些,都乐于强健体魄,忙于学习工作,精于发明创造,那么建设社会主义的砖瓦早就多到有剩,民族复兴可能也已完成 99.99%。从生物学的角度来说,知冷畏热,趋利避害,这都是为了提高个体的生存几率,但勤劳能有什么危害呢?为什么大脑总是会想方设法阻止我们长时间的思考或者劳...

WWDC 2017 iOS11 新特性 Drag and Drop 解析

WWDC 2017 刚结束,虽然如预期的一样,缺少意料之外的惊喜,但依旧有不少新的特性和 API 值得圈点。抛开 Core ML 以及 ARKit 这些影响深远的亮点不谈,目前抢眼的系统升级,莫过于 UIKit 中新增的 Drag and Drop 特性了。 拖拽的意义 在阅读本文之前,建议读者先亲手把玩下 Drag and Drop 的各种姿势,有过实际的操作体验,才能更好的明白一些 ...

Facebook model 库 Remodel 观感

Linus Torvalds 有句名言:”Bad programmers worry about the code. Good programmers worry about data structures and their relationships.” 虽然不知道自己算不算的上是 “Good programmer”,但我对数据的重要性是深有体会,之前也写过几篇与 model 相关的技...

iOS 客户端 HTTPS 防中间人攻击实践

写篇文章介绍些以前在 iOS 客户端实践 HTTPS 安全的经历。 不同工程师写代码的习惯不一样,有些喜欢边写边查,即使在接触陌生的知识域时,也要先写一些代码,遇到难题再去 google 或者 stackoverflow 找答案,另一些则习惯在动手之前,先储备足够多的理论知识,在建立整体认知之后再定框架填细节。我个人建议初学者采用第一种方式,而对于有一定工作年限且寻求专业度提升的工程师来说...

TCP/IP 系列之包与流

最近工作有点忙,有些天没更新啦,趁着五一放假,接着写之前 TCP/IP 的相关话题。 前些天看到有人吐槽 TCP 粘包和拆包的话题,说所谓的粘包是新手发明出来的术语,有误人子弟之嫌。粘包一说,对我也是陌生的概念,第一反应可能由是英翻中导致的。比如 iOS 术语里将 GCD 翻译为大中枢派发,就显得怪异且难以适应,有些术语还是让它保持原汁原味的好。 在搜索相关话题之前,我一番脑洞,感觉粘包...

TCP/IP 系列之 TCP 流控与拥塞控制(一)

TCP 流控(flow control)与拥塞控制(congestion control),是我个人认为每个 iOS 工程师都应该熟悉的,价值含量极高的知识点。明白了三次握手,但是不了解流控和拥塞控制背后的设计原理,是不能够在简历上写「精通 tcp/ip」的。 Flow control 和 congestion control 的学习价值高,而且学习过程也会很有趣。掌握整个过程的意义,远超...

慢一点,焦虑少一点

上周末做了一件有趣的事,一名在职读者,在技术学习和提升上感到迷茫和焦虑,向我求助,最后二人通了一个小时的电话,他说明了现状和原委,我也以我的经历和角度,提了些或许有用的建议。 他的一些情况和心态,勾起了我曾经在学习上所经历过的一些困境,觉得可以写篇文章和大家分享下,如果你也有类似的经历和困惑,以下的文字或许能有帮助。 慢一点 这名读者在叙述自身情况的时候,我能从语气里感受一股明显的焦虑...

如何设计一个通讯协议

最近给 TKeyboard 增加了不少新功能,其中最有意义的部分是,通过蓝牙和 Wifi,配合 protobuf,在 Mac 和 iOS 之间建立了两条便捷的数据交换通道,算是打好了未来产品开发的地基,网络通道建立好了,后续的想象空间也大。 比如,现在可以将 iPhone 上 safari 正在浏览的网页,一键分享到 Mac 的 safari 上,比 handoff 更方便可靠。还可以在 ...

TCP/IP 系列之重新认识 IP 地址

TCP/IP 系列第三篇,关于 IP 地址。这是我最有意愿分享,也最有趣的一个话题。IP 地址有意思的地方在于,虽然只是一个简单的 IP 地址,短短的 4 个字节,32 bits,里面包含的知识却是森罗万象。智者看山,目之所及,胸中自起万千丘壑。知识底蕴够丰富,才能窥见一个 IP 地址里所隐含的「花中世界」。 预热 在开始之前,需要做一些基础知识的预热。要对...

今年第一个独立 App,TKeyboard,也是第一个开源项目

在咖啡馆耗费了数个周末之后,终于将这个灵光一闪的点子变成了一个实实在在可以运行的 app。同时意味着年初制定的第一个小目标达成,完成了 2017年的第一个独立 app。 在app上架的同时,我决定将代码全部开源,除了兑现去年年底的承诺之外,我相信代码本身的价值,要高于 App 的功能,开源能带来更多知识的碰撞和增长。去年开源给我带来了不少乐趣,希望今年能有更好的成绩。整个项目涉及到一些比较...

TCP/IP 系列之 Header 篇

这是 TCP/IP 系列的第二篇,阅读目标是建立对网络包结构的初步认识。 上一篇里,我们提到一次完整的 TCP 会话其实是一个字节流,只不过我们可以按照一定的规则来切割这个字节流,从而划分出一个个的网络包。我们经常说抓包分析网络故障,这个抓包里所指的包在不同的语境下其实意义并不相同,首先我们得对包的构成形成具象的认知。 再看七层协议 刚毕业那会,大家都喜欢在简历上写「精通 TCP/IP...

TCP/IP 系列之初印象

如果有人问我推荐技术类书籍,我个人首选一定是【TCP/IP 详解】原版。这种大部头的经典之作里所包含的知识,说是浩如烟海也不为过,每次重新翻起总会有一些新的体悟和收益。经典的好处在于,它描述的一般是通用的计算机问题,可以帮助读者形成通用的计算机思维,而不局限于某一领域或某一场景,常看常新。 当然这本书的厚度也到了让人望而生畏的程度,如果着急短时间内啃完,多半会由于无法完成目标的沮丧半途而废...

技术文章的阅读姿势

阅读技术文章可以说是我们程序员的日常之一,Peak 君每天也会进行定量的阅读。特写一篇小文分享下心得,介绍下过去几年,在纠正阅读习惯上所做的一些努力和取得的成果,或许可以帮助一些朋友,节省少许阅读时间,提升一点学习效率。 差不多两年前,我开始搭建 Android 相关的知识体系。最开始的想法是从基础知识的积累开始,正好这几年社区的技术分享盛行,「掘金」、「开发者头条」、「简书」等渠道上每天...

闲聊 Hash 算法

最近读了一篇好文:【微信高并发资金交易系统设计方案——百亿红包背后的技术支撑】,其中关于高并发性能问题的解决方案中,有应用 hash 算法的思想。想起公众号后台里断断续续有读者提起算法方面的问题,觉得可以写篇文章聊聊算法中的 hash 算法。顺道科普下算法与数据结构的重要性。 开讲前,先跑题闲聊下程序员的技术功底。我常说每个程序员都有自己独特的技术视野和知识盲区,不同程序员之间很难因为某些...

四十以后,何处而安

之前是 34 岁被离职,这次是 45 岁必须退休,华为又一次用年龄挑动了众多程序员的神经。老问题又在耳边回响起来,程序员这门手艺到底能干多久,能做出多少价值来?这问题,值得每个阶段的从业者持续思索和探究。 这自然也包括 20 岁出头的初入行的朋友们,处于这个年龄段看待这个世界,还是一片生机勃勃、新鲜有趣、充满无限可能的,进可以跻身创业大军一搏富贵,退可以去 BAT 颐养天年。20 岁到 4...

iOS 编程中的 Type System

接之前一篇 Pattern Matching 的文章,Type System 是另一项编程语言,或者说编译器所提供的便利。Pattern Matching 可以让我们少写代码,而 Type System 可以让我们少犯错误,减少 Type 相关的各种 bug。 一般来说,我们写代码时为了降低 bug 率,一是依赖于程序员自身的经验积累,二是靠编译器做各种静态检查,type system 则...

Pattern Matching 的意义

一个语言特性往往具备多种 API 表现形式,理解特性比硬记 API 更有助于我们掌握一门新语言。Swift 作为现代编程语言的集大成者,具备很多优秀的特性来帮助开发者快速高效的编写代码,Pattern Matching 就是其中之一。 程序员 vs 编程语言 我们所写的代码,或者说一个 App 所具备的功能,最终都是程序员和编程语言共同作用的成果。我们使用某种编程语言写代码的时候,会受语...

iOS 创建对象的姿势

在写 iOS 代码的时候,怎么样去 new 一个新对象出来,都有一些讲究在里面。使用不同的姿势去创建对象,对后期维护所造成的影响会存在细微的差别。 init 创建 在之前一篇分析 iOS 代码耦合的文章中,提到过当我们给一个对象的 property 赋值的时候,通过 init 方法传入参数来初始化 property 会让我们的代码更可靠。 有些人在定义带 property 的 clas...

Hosted by Coding Pages