-
理解 Block 实现原理
Block 是一种带有自动变量值的匿名函数。Block 在 iOS 日常开发中会频繁使用到,使用起来也十分方便,而它的实现原理和机制很多小伙伴却一无所知。 Block 是一种带有自动变量值的匿名函数,它能够自动捕获函数内使用到的参数,本文将从细节分析 Block 的实现原理。一、Block 的实现在探寻 Block 实现原理中,命令行工具Clang是非常实用的,它可以将其转换成 C++ 源码,方便我们了解其中的实现原理。clang -rewrite-objc main.m我们可以利用上...…
-
理解 ARC 实现原理
ARC 是 iOS 中管理引用计数的技术,帮助 iOS 实现垃圾自动回收,具体实现的原理是由编译器进行管理的,同时运行时库协助编译器辅助完成。主要涉及到 Clang (LLVM 编译器) 和 objc4 运行时库。本文主要内容由修饰符 __strong 、 __weak 、 __autorelease 拓展开,分别延伸出引用计数、弱引用表、自动释放池等实现原理。在阅读本文之前,你可以看看下面几个问题: 在 ARC 下如何存储引用计数? 如[NSDictionary ...…
-
RunLoop 学习笔记
对本文感兴趣的同学可以查看本文 Demo ,其中实现了本文大部分相关内容。本文在部分基础概念知识点借鉴(copy)了参考文章内容,望包涵。一、RunLoop1.1 RunLoop 的概念RunLoop和线程是一对一的关系,通常来讲线程执行完任务之后就会退出,有时候我们需要一个常驻线程帮我们处理事件,处理完成也不会退出,等待下一次处理事件。这种机制一般称作为 事件循环机制(EventLoop) ,RunLoop 管理了其需要处理的事件和消息,并提供了一个入口函数来执行上面EventLoo...…
-
学习并理解 23 种设计模式
设计模式 Design Pattern 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。。在《设计模式:可复用面向对象软件的基础》一书中所介绍的 23 种经典设计模式,不过设计模式并不仅仅只有这 23 种,随着软件开发行业的发展,越来越多的新模式不断诞生并得以应用。有经验的开发者在学习设计模式可以和过往的经验互相印证,更容易理解这些设计模式。设计模式一般包含模式名称、问题、目的、解决方案、效果等...…
-
iOS 单元测试和 UI 测试快速入门
前言平时写完业务代码的时候都会去自己测试一遍,后面每次有修改都需要重复测,不管是一个业务流程还是一个工具类,其实都可以通过测试框架来帮助我们完成测试,特别是一些频繁修改的代码,更需要严谨的测试。在浅浅地对自动化测试有一些了解时,觉得写测试代码挺耗时间,但其实对后期的帮助是非常大的,可以根据自己的实际情况来决定哪些地方需要加入自动化测试。本文内容适合刚接触 iOS 自动化测试的同学,基本内容来自于各年 WWDC 的多个 Sessions,本文代码部分基于我的一个学习 Demo,喜欢的可以了解...…
-
WWDC 2018:效率提升爆表的 Xcode 和 LLDB 调试技巧
WWDC 2018 Session 412 : Advanced Debugging with Xcode and LLDB前言在程序员写 bug 的职业生涯中,只有 bug 会永远陪伴着你,如何处理与 bug 之间的关系,是每一位程序员的必修课。特别是入门程序员经常受 bug 的影响,熬夜加班压力大,长痘长胖还脱发。每一位 iOS 和 macOS 开发者都是幸运的,因为苹果的 Xcode 和 LLDB 调试工具,这是每一位开发者应该使用的调试神器,可以帮助我们更快地解决问题。本文将主...…
-
WWDC 2017:高级开发应该掌握的自动布局技巧
构建 app 时使用的自动布局技术,其实就是建立视图与视图之间关系。而约束是建立视图间关系的纽带,帮助我们的 app 可以适应各种尺寸的屏幕,在应对花样百出的布局需求时游刃有余。本文已收录至 iOS 成长之路3期·WWDC17内参前言如果你以前从未使用过Autolayout,现在网上已经有很多很优秀的教程,包括往届 WWDC 中 sessions 视频资源都可供查看学习。在本文中将不再重复基本的使用方法,更多的去介绍一些更加复杂的场景中的应用,本文中技术结合实例使你更容易理解吸收。让我...…
-
一份传男也传女的 React Native 学习笔记
学习就如同长跑,要想跑的远,就不能跑得太快。背景介绍这段时间了解了一些前端方面的知识,并且用 React Native 写了一个简易新闻客户端 Demo。React Native 和原生开发各有所长,具体就不细说。混合使用能充分发挥各自长处,唯一的缺憾就是 React Native 和原生通信过程相对不那么友好。在这里分享一下学习过程中个人认为比较重要的知识点和学习资料,本文尽量写得轻一些,希望对读者能够有所帮助。预备知识有些前端经验的小伙伴学起 React Native 就像老马识途...…
-
Python 萌新 - 花10分钟学爬虫
Python 新手入门很多时候都会写个爬虫练手,本教程使用 Scrapy 框架,帮你简单快速实现爬虫,并将数据保存至数据库。在机器学习中数据挖掘也是十分重要的,我的数据科学老师曾经说过,好算法不如好数据。介绍Scrapy ,Python 开发的一个快速、高层次的屏幕抓取和 web 抓取框架,用于抓取 web 站点并从页面中提取结构化的数据。文件结构清晰,即使是小白也能够快速上手,总之非常好用😂。XPath ,它是一种用来查找 XML 文档中节点位置的语言。 XPath 基于 XML 的...…
-
Python 萌新 - 实现 Markdown 图片下载器
简书支持打包下载所有文章功能,可以方便作者转移或保存。但是图片不支持自动下载,最近在学Python,便写了一个md图片下载器。目标本人 Python 新手,欢迎大佬指点。本文主要是对源码进行解读,期望实现以下目标: 一键下载所有Markdown文件中的图片,并保存到本地。 图片根据文章分类 简单易用。先上最终效果:实现步骤 搜索指定文件夹,找出文件夹及子文件包含的md文件。 匹配出md文件中所有的图片。 所有图片异步下载。 下载报告与GUI。 Python 打包工具。1...…