转载: 连接
小程序跳转页面有几种方式? 有什么不同?
在小程序中每个页面可以看成是一个pageModel,pageModel全部以栈的形式进行管理(最多十层)
栈和堆的区别:
管理方式不同
-
栈是系统编译器启动管理,不需要程序员手动管理
-
堆的释放由程序员手动管理,不及时回收容易产生内存泄露
分配方式不同
-
栈有两种分配方式:静态分配和动态分配
-
静态分配是系统编译器完成的,比如局部变量的分配
-
动态分配是由alloc函数进行分配的,但是栈的动态分配和堆的动态分配是不同的,它的动态分配也由系统编译器进行释放,不需要程序员手动管理
-
-
堆是动态分配和回收内存的,没有静态分配的堆
分配大小不同
-
栈是向低地址扩展的数据结构,是一块连续的内存区域
-
堆是向高地址扩展的数据结构,是不连续的内存区域
小程序的路由跳转分为两种,组件跳转以及api跳转
api形式分为
navigateTo 保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面
redirectTo 关闭当前页面,跳转到应用内的某个页面
switchTab 跳转到tabBar页面,同时关闭其他非tabBar页面
navigateBack 返回上一页面
reLanch 关闭所有页面,打开到应用内的某个页面
前面有提到栈,那么这些导航方式跟栈有什么关系呢,看下面
初始化 新页面入栈
navigateTo 新页面入栈
redirectTo 当前页面出栈,新页面入栈
navigateBack 页面不断出栈,直到目标返回页,新页面入栈
switchTab 页面全部出栈,只留下新的 Tab 页面
reLanch 页面全部出栈,只留下新的页面
getCurrentPages() 函数用于获取当前页面栈的实例(属性及方法),以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面