我对 Getx
的依赖注入不熟悉,能否有人解释一下 Get.put()
和 Get.lazyPut()
的好处,并告诉我它们之间的区别?
我对 Getx
的依赖注入不熟悉,能否有人解释一下 Get.put()
和 Get.lazyPut()
的好处,并告诉我它们之间的区别?
简短回答
Get.put()
会立即放置Get.lazyPut()
会在需要时才放置put
方法直接将一个类的实例放入内存中,而lazyPut
只是将它的构建器放在内存中。
lazyPut
的好处是可以节省内存,直到你真正需要使用这个实例时才去创建它。此外,你还可以在构建器中放置更复杂的代码。另一个lazyPut
的好处是你还可以在上面加上fenix: true
,这意味着如果该实例被释放掉了,它也可以重新构建。
我认为使用put
的唯一好处就是当调用find
方法时速度会稍微快一些,因为不需要先调用构建器来获取实例。至于是否还有其他好处,我不清楚。
Get.put() :
将注入一个依赖项,并在注入时立即开始执行,我的意思是它的生命周期方法如onInit()
和onReady()
将在您像这样进行注入时执行:
class ControllerOne extends GetxController {
int a = 1;
@override
void onInit() {
print('ControllerOne onInit');
super.onInit();
}
@override
void onReady() {
print('ControllerOne onReady');
super.onReady();
}
}
final controller = Get.put(ControllerOne()); // will inject that dependecy, and immediately will call onInit() method then onReady() method
调试日志:
ControllerOne onInit
ControllerOne onReady
Get.lazyPut() :
这个方法也会注入一个依赖,但只有当你真正使用该控制器时,它才会开始执行生命周期方法onInit()
和onReady()
:
class ControllerTwo extends GetxController {
int b = 2;
@override
void onInit() {
print('ControllerTwo onInit');
super.onInit();
}
@override
void onReady() {
print('ControllerTwo onReady');
super.onReady();
}
}
final controller = Get.lazyPut(() => ControllerTwo()); // will inject that dependecy, and wait until it's used then it will call onInit() method, then onReady() method
调试日志:
/* nothing will be printed right now */
但是如果我们使用控制器,举个例子:
controller.b = 10;
然后控制器将开始运行:
调试日志:
ControllerTwo onInit
ControllerTwo onReady