分类和扩展有什么区别?可以分别用来做什么?分类有哪些局限性?分类的结构体里面有哪些成员?分类
通常用于将一个功能强大臃肿的类,分布在几个不同的文件。
只能增加方法,不能增加成员(实例)变量。
123456789Category 是表示一个指向分类的结构体的指针,其定义如下:typedef struct objc_category *Category;struct objc_category { char *category_name OBJC2_UNAVAILABLE; // 分类名 char *class_name ...
摘自这里
Version Control System (VCS)
Version control systems are a category of software tools that help a software team manage changes to source code over time. Version control software keeps track of every modification to the code in a special kind of database.
软件工程中,版本控制系统是敏捷开发的重要一环,为后续的持续集成提供了保障...
组件化之 URL RouteiOS 中主要有三种组件化方式,URL Route、target-action、protocol 匹配。这里主要讲第一种:URL Route。这类方式大致的思想是通过注册,根据不同 url 结构存入不同的 block。等待调用时,通过存储的 block 中返回对象或执行操作。没有利用 Runtime,相对来说实现比较简单。
优缺点优点实现简单。
缺点
依赖于命名规定,无法在编译时发现问题
通过硬编码的字符串来做解耦,某种意义上来说也是一种伪解耦,并没有做到真正的解耦。
代码实例12345// 注册某个URL[URLRouter registerURL:...
组件化之 Target-ActioniOS 中主要有三种组件化方式,URL Route、Target-Action、Protocol 匹配。这里主要讲第一种:Target-Action。这类方式的大致思想是利用语言的特性 runtime,根据传入 target 和 action,动态的创建类去调用相应的方法。同时利用分类规范了传入的参数。
优缺点优点
利用 Category 可以明确声明接口,进行编译检查
实现方式轻量,避免了注册操作
缺点
过度依赖 runtime,无法应用在纯 Swift 项目中
无法保证所使用的模块一定存在,target 模块在修改后,使用者只有在运行时才能发现错...
组件化之 Protocol 匹配iOS 中主要有三种组件化方式,URL Route、Target-Action、Protocol 匹配。这里主要讲第一种:Protocol 匹配。
这类方式的大致思想是通过 Protocol 来获取 class,再动态创建实例。
优缺点优点
利用接口调用,实现了参数传递时的类型安全
直接使用模块的 protocol 接口,无需再重复封装
缺点
用 OC runtime 创建对象,不支持 Swift
由框架来创建所有对象,创建方式有限,例如不支持外部传入参数,再调用自定义初始化方法
无法保证所使用的 protocol 一定存在对应的模块,也无法直接判断...
为什么要将build方法放在State中,而不是放在StatefulWidget中?
状态访问不便。
试想一下,如果我们的StatefulWidget有很多状态,而每次状态改变都要调用build方法,由于状态是保存在State中的,如果build方法在StatefulWidget中,那么build方法和状态分别在两个类中,那么构建时读取状态将会很不方便!试想一下,如果真的将build方法放在StatefulWidget中的话,由于构建用户界面过程需要依赖State,所以build方法将必须加一个State参数,大概是下面这样:1234Widget build(BuildContext ...
Flutter 原理UI 系统无论是 Android SDK 还是 iOS 的 UIKit 的职责都是相同的,它们只是语言载体和底层的系统不同而已。Flutter 提供了一套 Dart API,然后在底层通过 OpenGL 这种跨平台的绘制库(内部会调用操作系统 API)实现了一套代码跨多端。由于 Dart API 也是调用操作系统 API,所以它的性能接近原生。
Element 与 BuildContext组件最终的 Layout、渲染都是通过 RenderObject 来完成的,从创建到渲染的大体流程是:根据 Widget 生成 Element,然后创建相应的 RenderObjec...
摘自这里
Version Control System (VCS)
Version control systems are a category of software tools that help a software team manage changes to source code over time. Version control software keeps track of every modification to the code in a special kind of database.
软件工程中,版本控制系统是敏捷开发的重要一环,为后续的持续集成提供了保障...
构建底层的发布和订阅事件总线事件总线是对发布和订阅设计模式的一种实现,通过发布,订阅可以将组件间一对一和一对多的耦合关系解开。
一对一:delegate和block,两者只适合做一对一数据传递,局限性较大
一对多:KVO和NSNotificationCenter,两者过于灵活而无法管控和维护
Promise一种专门针对异步数据操作编写的一套统一规则的漠视。本质是通过Promise对象保存异步数据操作,同时Promise对象提供统一的异步数据操作事件处理的接口。
Promise对象的三种状态
pending 表示Promise对象当前正在等待异步事件处理中
fulfilled 表示Pro...
GUI 框架基本单元是控件。
控件负责界面元素数据的存储和更新,原始数据都存储在空间的属性上,直接更新控件的属性就能够完成界面元素更新操作,控件的属性设置成不同的 值会让界面元素呈现不同的外观。
渲染树记录控件之间的关系。关注界面的布局,控件在界面中的位置和大小
渲染层树由渲染层对象组成,根据GUI框架的优化条件来确定创建哪些渲染层对象,每次新创建一个渲染层对象就会去设置它的父对象和兄弟对象。渲染层对象创建完毕,接下来就需要将各渲染层对象里的控件按照渲染树布局生成Bitmap。
渲染流程一般会经过布局,渲染,合成三个阶段。
布局布局阶段依据渲染树计算出控件的大小和位置。
渲染渲染阶段...