Flutter3.0 发布 2022/05/12
Google IO 发布会
一起看 I/O | Flutter 3 正式发布! | Youtube - What’s new in Flutter 3.0
* 稳定版本支持:macOS和 Linux
* 稳定支持苹果ARM 处理器
* 可折叠设备支持
* Dart语法增强 eum枚举
* 命名参数 anywhere
* super 构造方法简化
类的内存结构:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
typedef struct ClassMetadata {
uintptr_t Kind;
struct ClassMetadata *super;
void *data[2];
uintptr_t data2;
uint32_t InstanceAddressPoint;
uint32_t InstanceSize;
uint16_t InstanceAlignMask;
uint16_t Reserved;
uint32_t
Swift值类型内存探究
enum
默认关联值类型的枚举:
枚举类型默认对齐字节是 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 没有关联值 占用内存 1 字节
enum Test {
case t1,t2,t3
}
print(MemoryLayout.alignment)//枚举类型内存对齐:1
print(MemoryLayout.size)//枚举类型实际大小:1
print(MemoryLayout.stride)//枚举类型分配:1
// 有默认关联值 占用内存 1 字节
enum Test
Swift内存布局初探
enum
问题实际分配内存为何是25?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
///带有关联值的枚举
enum TestEnum {
case t1(Int, Int, Int)
case t2(Int, Int)
case t3(Int)
case t4(Bool)
}
print(MemoryLayout.alignment)//Int类型内存对齐:8
print(MemoryLayout.size)//实际大小:24 + 1
谷歌的软件工程
目录
1、简介
2、软件开发
* 源代码库
* 系统构建
* 代码 review
* 测试
* Bug追踪
* 编程语言
* 调试与分析工具
* 发布工程
* 项目启动批准
* 事故复盘
* 软件反复重写
3、项目管理
* 20%时间自由分配
* OKR 机制
* 项目批准
* 项目重组
* 年度黑客马拉松
4、人员管理
* 角色分工
* 办公区域设施
* 培训
* 部门间转移
* 绩效考核和奖励
1 简介
谷歌是一家非常成功的公司。除了 Google 搜索和 AdWords 的成功之外,Google 还提供了许多其他出色
代码评审
代码评审通常由作者之外的人评审代码,在代码引入代码库之前进行。代码评审通常需要一个流程和支持该流程的工具。
在谷歌,基本上每一个变更在提交前都需要经过代码评审,每一个工程师都需要负责发起评审和评审变更。
01 代码评审流程
代码评审可以在软件开发的许多阶段进行。在谷歌代码评审发生在变更提交到代码库之前,这个阶段也称为提交前评审。
代码评审的最终目的是让另一个工程师同意变更,我们通过标记变更为 “看起来不错”(looks good to me, LGTM) 来表示这一点。
我们将此LGTM 用作一个必要的许可 “项〞来允许提交变更。
谷歌的一个典型代码评审流程包括以下步骤:
Flutter
* 1.开发效率高- 快发阶段 JIT 即时编译,支持 HotReload,节省开发时间.发布节点 AOT提前编译生成高效机器码保证应用性能
* 2.高性能-基于 Skia 引擎提供高保证的 UI 体验
* 3.快速内存分配-Flutter 框架使用函数式流,这使得它在很大程度上依赖于底层的内存分配器。
* 4.类型安全和空安全-2.12 后开始支持空安全和静态类型检测,在编译前提前发现错误,并排除潜在的问题。
Flutter 技术栈
Flutter的三棵树
Flutter 核心原理
JIT 即时编译与 AOT 提前编译
Flutter 是一个跨平台的 UI
The ‘Pods-wii’ target has frameworks with conflicting names: iflymsc.framework
原因是:iflymsc.framework接入 native 中和之前 flutter 中的iflymsc.framework冲突了
解决方式:flutter 缓存删除即可(从主工程的 development pods 的xxx_msc_plugin中删除)
TabController addListener两次回调
问题:这个监听在点击切换tab的时候会回调两次,左右滑动切换tab正常调用一次。
TabController a
Flutter 官方
Flutter 官方网站(中文) | Flutter 官方网站(英文)
* 全网最全 Flutter 与 React Native 深入对比分析
* 字节跳动为什么选用Flutter:并非跨平台终极之选,但它可能是不一样的未来:
Flutter 原理和优化
515 更新
🐕 Flutter 状态管理框架 Provider 和 Get 分析
@极速男孩:Flutter 作为一个声明式的 UI 框架状态管理是一个让人头疼的问题,没有状态管理会导致难以复用/单元测试,跨页面无法传递数据,setState 方法会过度刷新的问题。本文主
Flutter常见Widget
Expanded()按照比例分配
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// expand
import 'package:flutter/material.dart';
class ExpandedLearn extends StatelessWidget {
@override
Widget build(BuildContext context) {
return n
Dart基本语法
Dart的设计目标应该是同时借鉴了Java和JavaScript。
Dart在静态语法方面和Java非常相似,如类型定义、函数声明、泛型等,
而在动态特性方面又和JavaScript很像,如函数式特性、异步支持等。
除了融合Java和JavaScript语言之所长之外,Dart也具有一些其它具有表现力的语法,如可选命名参数、..(级联运算符)和?.(条件成员访问运算符)以及??(判空赋值运算符)。
其实,对编程语言了解比较多的读者会发现,在Dart中其实看到的不仅有Java和JavaScript的影子,它还具有其它编程语言中的身影,如命名参数在Objective-C和
URLProtocol源码简析
swift标准库URLProtocol地址
一 、 URLProtocol初始化
1.1通过URLRequest初始化protocol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
open class URLProtocol : NSObject {
private static var _registeredProtocolClasses = [AnyClass]()
private static var _classesLock = N