Flutter中三种类实例化方式与Get.put的使用区别是什么?
三种Dart类实例声明方式的区别
第一种:
Instance obj;
仅声明了一个类型为Instance的引用变量,没有绑定任何实际的类实例。在Dart空安全规则下,这种写法编译会直接报错,必须加late关键字延迟初始化,或者声明为可空类型Instance? obj才能通过编译。此时变量没有实际指向的对象,直接调用其属性或方法会抛出运行时空异常,且该变量仅在当前声明的作用域内有效,出作用域后会被自动回收。第二种:
Instance obj = Instance()
声明变量的同时,在当前运行环境中创建了一个全新的Instance类实例,赋值给obj变量。该实例仅在持有它的作用域/类/组件内可访问,不同位置调用Instance()生成的都是完全独立的实例,数据互不关联,实例的生命周期和持有它的组件绑定,组件销毁时实例会被垃圾回收,无法直接实现跨页面的数据共享。第三种:
Instance obj = Get.put( Instance() )
创建Instance实例的同时,将该实例提交到GetX内置的全局依赖管理容器中托管,再返回该实例赋值给obj。该实例默认是全局单例,只要没有主动调用Get.delete<Instance>()手动销毁,哪怕当前持有它的页面被销毁,实例仍然会保存在GetX的容器中,项目任意位置都可以通过Get.find<Instance>()获取到同一个实例,天然支持跨页面的数据互通,无需额外做参数传递或全局变量封装。
内容的提问来源于stack exchange,提问作者Aquarius_Girl
相关产品推荐
相关产品推荐

