对于从 C 系语言转来学习 js 的开发者而言,最难理解的就是 js 中的var、let、const 的设计。在其他语言中,每个变量默认都有自己的作用域,然而在 js 中并不是这样。直到ECMAScript 6标准的确立,才给 js 开发带来了更简单的作用域管理。ECMAScript 6是在 2015 年正式发行,所以又叫ECMAScript 20…
看过了很多多线程的文章,也写过很多多线程相关的博客;也知道了多线程在操作系统层面,是由中断、原语、信号量、互斥等底层原理实现;但真正遇到多线程问题时,还是不能很快的定位问题出在了哪里。 iOS GCD 的实践 在处理复杂且庞大的多线程项目时,我并不喜欢用 GCD,而更倾向于 NSOperation,原因有二: 1、GCD 的语法格式 (block)…
作者:xiaobo Platform channel 是 Flutter 与 Native 平台通信的桥梁,它能帮助我们调用一些 Flutter 无法支持的平台属性: 推送通知、生命周期、deep links... 传感器、相机、地理位置、电池、声音... 分享到其他 app、打开其他 app 等等... 阅读须知 该篇文档基于的 Flutter …
作者:xiaobo 一个纯 Flutter 项目的工程结构 在开始学习 Flutter 之前,我们往往需要一个 Flutter 工程,用下面的命令,可以快速的创建出一个 Flutter 工程: $ flutter create --template module my_flutter 如果一切顺利,就会看到如下的目录结构(部分) my_flutte…
作者: xiaobo Dart 是门类型安全的语言,由于 Dart 同时支持 JIT 编译和 AOT 编译,所以 Dart 类型系统同时工作在编译期和运行时。类型安全的语言,一般都是强类型语言,也就是定义一个变量的时候,该变量需要有明确的类型: Int a = 10; 但是,由于 Dart 具有类型推断机制,所以类型声明是可选的: var argu…
作者:xiaobo 最近,我才知道原来计算机基础科学中,比较强调一个词,叫编程范式 (programming paradigm)。并且,到目前为止,我们常用的编程范式有四种:声明式、命令式、函数式、和面向对象;其中,函数式被认为是声明式的子集。本节,记录下我对声明式和命令式的理解。其实这两种方式,我们开发中都用到过。 声明式 declarative…
之前写过一篇 C 语言宏定义的方方面面,最近研究了一下 ReactiveCocoa 提供的宏 weakify 与 strongify ,让我对宏的写法有了更多的认识,原来宏还有这么多好玩的地方。 一:weakify 的最终展开 我们可以先用 Xcode 的预处理功能,展开 @weakify(self) ,看看宏的最终展开是什么: 最终展开形式中的 …
宏作为 C 语言强大的预处理特性,在 C 系列开发中有着举足轻重的作用,一个显而易见的作用是底层 API 的跨平台能力。例如 iOS 开发平台的 CGFloat 定义: #if defined(__LP64__) && __LP64__ #define CGFLOAT_TYPE double #else #define CGFLOA…
Container View Controller iOS 实际开发中,为了方便管理视图,我们经常会把一个 VC (ViewController) 作为容器 VC,其他子视图的 VC 作为容器 VC 的子 VC。同时 view 也作为容器 View 的子 view (subview)。苹果官方文档称为 Container View Controll…