文章

性能优化

性能优化

性能优化

性能优化

identical

检查两个引用是否指向同一个对象:

1
2
3
4
5
6
var o1 = new Object();
// 可以省略 new
var o2 = Object();

print(o1, o2); // false
print(o1, o1); // true

实例话常量构造函数:

const 关键字在多个地方创建相同的对象的时候,内存中只保留了一个对象;

1
2
3
4
5
6
7
8
// o1 o2共享了存储空间

var o1 = const Object();
// 可以省略 new
var o2 = const Object();

print(identical(o1, o2)); // true
print(identical(o1, o1)); // true
1
2
3
4
5
6
print(identical([2], [2])); // false

// 等同于
var a = [2];
var b = [2];
print(identical(a, b)); // false
1
2
3
4
5
6
print(identical(const [2], const [2])); // true

// 等同于
const a = [2];
const b = [2];
print(identical(a, b)); // true

普通构造函数

1
2
3
4
5
6
7
8
9
10
11
class Container {
  int width;
  int height;
  Container({required this.width, required this.height});
}

void main() {
  var c1 = new Container(width: 100, height: 100);
  var c2 = new Container(width: 100, height: 100);
  print(identical(c1, c2)); // false
}

常量构造函数 - const

  1. 常量构造函数需以const 关键字修饰
  2. const 构造函数必须用于成员变量都是final的类
  3. 如果实例化时不加const修饰符,即使调用的是常量构造函数,实例化的对象也不是常量
  4. 实例化常量构造函数的时候,多个地方创建这个对象,如果传入的值相同,只会保留一个对象
  5. Flutter中const修饰符不仅仅是节省组件构建时的内存开销,Fluter在需要重新构建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 常量构造函数
class Container {
  final width;
  final height;
  const Container({required this.width, required this.height});
}

void main() {
  var c1 = new Container(width: 100, height: 100);
  var c2 = new Container(width: 100, height: 100);
  print(identical(c1, c2)); // false

  var c3 = const Container(width: 100, height: 100);
  var c4 = const Container(width: 100, height: 100);
  print(identical(c3, c4)); // true
}
本文由作者按照 CC BY 4.0 进行授权