当前位置: 首页 > news >正文

Swift的方法派发机制

1. 静态派发(Static Dispatch)

静态派发在编译时确定方法的具体实现,调用时直接跳转到该实现。静态派发的优点是性能高,因为不需要运行时查找方法实现。

适用场景:
  • 值类型(Struct 和 Enum):值类型的方法默认使用静态派发。

  • Final 类和方法:标记为 final 的类或方法无法被继承或重写,因此使用静态派发。

  • 全局函数和静态方法:这些方法在编译时就能确定实现,使用静态派发。

示例:
struct Point {var x: Intvar y: Intfunc description() -> String {return "(\(x), \(y))"}
}let p = Point(x: 10, y: 20)
print(p.description())  // 静态派发

2. 动态派发(Dynamic Dispatch)

动态派发在运行时确定方法的具体实现。Swift 中的动态派发主要通过虚表(VTable)和消息转发(Message Forwarding)实现。

2.1 虚表派发(VTable Dispatch)

虚表派发是类方法默认的派发方式。每个类都有一个虚表,其中存储了该类所有可重写方法的指针。子类继承父类的虚表,并可以覆盖其中的方法指针。

适用场景:
  • 类的非 Final 方法:类的方法默认使用虚表派发,除非标记为 final

  • 继承和重写:子类可以重写父类的方法,运行时根据对象的实际类型调用正确的方法。

示例:
class Animal {func makeSound() {print("Some sound")}
}class Dog: Animal {override func makeSound() {print("Bark")}
}let animal: Animal = Dog()
animal.makeSound()  // 动态派发,输出 "Bark"
2.2 消息转发(Message Forwarding)

消息转发是 Objective-C 的派发机制,Swift 通过 @objc 和 dynamic 关键字支持这种派发方式。消息转发允许在运行时动态解析方法调用,甚至可以在运行时修改方法实现。

适用场景:
  • 与 Objective-C 交互:标记为 @objc 的方法使用消息转发。

  • 动态方法解析:标记为 dynamic 的方法使用消息转发,允许在运行时修改方法实现。

示例:
class MyClass {@objc dynamic func sayHello() {print("Hello")}
}let instance = MyClass()
instance.sayHello()  // 消息转发

3. 协议派发(Protocol Witness Table Dispatch)

协议方法使用协议见证表(Protocol Witness Table, PWT)进行派发。每个遵循协议的类型都有一个 PWT,其中存储了协议方法的实现指针。

适用场景:
  • 协议方法:协议中的方法默认使用 PWT 派发。

  • 泛型约束:泛型类型约束为协议时,使用 PWT 派发。

示例:
protocol Greetable {func greet()
}struct Person: Greetable {func greet() {print("Hello")}
}let greeter: Greetable = Person()
greeter.greet()  // 协议派发

4. 特殊场景

4.1 泛型方法派发

泛型方法在编译时生成特定类型的实现,通常使用静态派发。但如果泛型类型约束为协议,则使用协议派发。

示例:
func printGreeting<T: Greetable>(_ greeter: T) {greeter.greet()  // 协议派发
}let person = Person()
printGreeting(person)  // 输出 "Hello"
4.2 扩展中的方法派发

扩展中的方法默认使用静态派发,即使是对类类型的扩展。如果扩展中的方法被重写,仍然使用静态派发。

示例:
class MyClass {func sayHello() {print("Hello from MyClass")}
}extension MyClass {func sayGoodbye() {print("Goodbye from MyClass")}
}class SubClass: MyClass {override func sayHello() {print("Hello from SubClass")}// 无法重写扩展中的方法
}let instance: MyClass = SubClass()
instance.sayHello()  // 动态派发,输出 "Hello from SubClass"
instance.sayGoodbye()  // 静态派发,输出 "Goodbye from MyClass"
4.3 @objc 和 dynamic 方法

标记为 @objc 的方法使用消息转发,允许与 Objective-C 交互。标记为 dynamic 的方法也使用消息转发,允许在运行时修改方法实现。

示例:
class MyClass {@objc dynamic func sayHello() {print("Hello")}
}let instance = MyClass()
instance.sayHello()  // 消息转发
4.4 final 关键字

标记为 final 的类或方法无法被继承或重写,因此使用静态派发。

示例:
final class MyFinalClass {func sayHello() {print("Hello")}
}let instance = MyFinalClass()
instance.sayHello()  // 静态派发

总结

Swift 的方法派发机制灵活且高效,支持多种派发方式以适应不同的场景:

  • 静态派发:适用于值类型、Final 类和方法,性能最高。

  • 动态派发:适用于类的继承和重写,通过虚表派发。

  • 协议派发:适用于协议方法,通过协议见证表派发。

  • 消息转发:适用于与 Objective-C 交互和动态方法解析。

理解这些派发机制有助于编写高效且符合预期的 Swift 代码。

相关文章:

Swift的方法派发机制

1. 静态派发&#xff08;Static Dispatch&#xff09; 静态派发在编译时确定方法的具体实现&#xff0c;调用时直接跳转到该实现。静态派发的优点是性能高&#xff0c;因为不需要运行时查找方法实现。 适用场景&#xff1a; 值类型&#xff08;Struct 和 Enum&#xff09;&am…...

4.python+flask+SQLAlchemy+达梦数据库

前提 1.liunx Centos7上通过docker部署了达梦数据库。从达梦官网下载的docker镜像。(可以参考前面的博文) 2.windows上通过下载x86,win64位的达梦数据库,只安装客户端,不安装服务端。从达梦官网下载达梦数据库windows版。(可以参考前面的博文) 这样就可以用windows的达…...

6.深度学习在推荐系统中的应用

接下来我们将学习深度学习在推荐系统中的应用。深度学习技术近年来在推荐系统中得到了广泛应用&#xff0c;能够有效提升推荐系统的性能和精度。在这一课中&#xff0c;我们将介绍以下内容&#xff1a; 深度学习在推荐系统中的优势常用的深度学习推荐模型深度学习推荐系统的实…...

Leetcode - 149双周赛

目录 一、3438. 找到字符串中合法的相邻数字二、3439. 重新安排会议得到最多空余时间 I三、3440. 重新安排会议得到最多空余时间 II四、3441. 变成好标题的最少代价 一、3438. 找到字符串中合法的相邻数字 题目链接 本题有两个条件&#xff1a; 相邻数字互不相同两个数字的的…...

ArrayList、LinkedList、HashMap、HashTable、HashSet、TreeSet

集合族谱 在这些集合中&#xff0c;仅有vector和hashtable是线程安全的&#xff0c;其内部方法基本都有synchronized修饰。 ArrayList 底层采用Object数组实现&#xff0c;实现了RandomAccess接口因此支持随机访问。插入删除操作效率慢。 ArrayList需要一份连续的内存空间。 A…...

在 Windows 系统中如何快速进入安全模式的两种方法

在使用电脑的过程中&#xff0c;有时我们可能会遇到一些需要进入“安全模式”来解决的问题。安全模式是一种特殊的启动选项&#xff0c;它以最小化配置启动操作系统&#xff0c;仅加载最基本的驱动程序和服务&#xff0c;从而帮助用户诊断和修复系统问题。本文中简鹿办公将详细…...

【CS61A 2024秋】Python入门课,全过程记录P7(Week13 Macros至完结)【完结撒花!】

文章目录 关于新的问题更好的解决方案Week13Mon Macros阅读材料Lab 11: Programs as Data, MacrosQ1: WWSD: QuasiquoteQ2: If ProgramQ3: Exponential PowersQ4: Repeat Wed SQL阅读材料Disc 11: MacrosQ1: Mystery MacroQ2: Multiple AssignmentQ3: Switch Optional Contest:…...

AspectJ 下 Advisor 的排序过程

在 AbstractAdvisorAutoProxyCreator#findEligibleAdvisors 方法中&#xff0c;找到 BeanFactory 中所有的 Advisor 后&#xff0c;针对当前 beanClass 进行过滤&#xff0c;筛选出符合当前 beanClass 的 Advisor&#xff0c;称之为 eligibleAdvisors。接着对 eligibleAdvisors…...

Unity 高度可扩展的技能与多 Buff 框架详解

一、框架设计 1.1 核心思想 组件化设计: 将技能和 Buff 抽象为可复用的组件&#xff0c;通过组合不同的组件实现复杂的效果。 数据驱动: 使用 ScriptableObject 或 JSON 等数据格式定义技能和 Buff 的属性&#xff0c;方便配置和修改。 事件驱动: 利用 Unity 的事件系统或自…...

机器学习中过拟合和欠拟合问题处理方法总结

目录 一、背景二、过拟合(Overfitting)2.1 基本概念2.2 过拟合4个最主要的特征2.3 防止过拟合的11个有效方法 三、欠拟合&#xff08;Underfitting&#xff09;3.1 基本概念3.2 欠拟合的4个特征3.3 防止欠拟合的11个有效方法 四、总结五、参考资料 一、背景 在机器学习模型训练…...

新一代高性能无线传输模块M-GATEWAY3

M-GATEWAY3是M3系列的通用接口模块&#xff0c;用于接收各种总线信号并将它们集成到一个系统中。该模块通过标准化传输协议XCPonETH进行输出&#xff0c;确保为各种测量应用提供无损信号。此外&#xff0c;M-GATEWAY3支持通过热点、ETH-PC或USB-C传输数据。借助M-GATEWAY3&…...

一、通义灵码插件保姆级教学-IDEA(安装篇)

JetBrains IDEA 中安装教学 第一步&#xff1a;事先准备 支持系统&#xff1a;Windows 7 ~ Windows 11、Linux、macOS&#xff1b;下载并安装兼容的 JetBrains IDEA 2020.3 及以上版本&#xff1b; 第二步&#xff1a;在 IntelliJ IDEA 中安装通义灵码 方法 1&#xff1a;通…...

【leetcode 32】1047. 删除字符串中的所有相邻重复项

Java中的queue、deque、ArrayDeque的区别 使用 Deque 作为堆栈(ArrayDeque是双端队列&#xff0c;当仅使用栈操作时push/pop&#xff0c;就是栈) class Solution {public String removeDuplicates(String s) {//使用 Deque 作为堆栈(ArrayDeque是双端队列&#xff0c;当仅使用栈…...

ubuntu 安装vnc之后,本地黑屏,vnc正常

ubuntu 安装vnc之后,本地黑屏,vnc正常 在Ubuntu系统中安装VNC服务器&#xff08;如TightVNC或RealVNC&#xff09;后&#xff0c;如果遇到连接时本地屏幕变黑的情况&#xff0c;可能是由于几种不同的配置或兼容性问题。以下是一些解决步骤&#xff0c;可以帮助你解决这个问题&…...

【实战AI】利用deepseek 在mac本地部署搭建个人知识库

之前的文章中实现了本地通过ollma 部署deepseek R1&#xff1a;14b 模型&#xff0c;这里我想继续实现个人知识库&#xff0c;方便自己文档&#xff0c;数据的检索&#xff1b; 下载anythingLLM 地址&#xff1a; https://anythingllm.com/desktop 下载安装即可&#xff1b…...

ASP.NET Core的贫血模型与充血模型

目录 概念 需求 贫血模型 充血模型 总结 概念 贫血模型&#xff1a;一个类中只有属性或者成员变量&#xff0c;没有方法。充血模型&#xff1a;一个类中既有属性、成员变量&#xff0c;也有方法。 需求 定义一个类保存用户的用户名、密码、积分&#xff1b;用户必须具有…...

java基础6(黑马)

一、static 1.static修饰成员变量 static&#xff1a;叫静态&#xff0c;可以修饰成员变量、成员方法。 成员变量按照有无static&#xff0c;分两种。 类变量&#xff1a;有static修饰&#xff0c;属于类&#xff0c;在计算机中只有一份&#xff0c;会被类的全部对象共享。…...

LabVIEW外延片光致发光(PL)扫描系统

本文介绍了基于LabVIEW的PL扫描系统的开发过程&#xff0c;包括硬件选型&#xff08;如ECOPIA激光器、EPP2000光谱仪&#xff09;、软件架构&#xff08;多线程控制、动态显示&#xff09;、环境适配&#xff08;温湿度控制、防震&#xff09;等关键设计。结合工业需求&#xf…...

安装Jenkins

Linux中安装jenkins 采用RPM安装包方式&#xff1a;Jenkins安装包下载地址 wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm执行安装 rpm -ivh jenkins-2.190.1-1.1.noarch.rpm修改配置文件&#xff1a; vi /etc/sysconfig/jenkins修改内容&…...

开发中常用的快捷键

开发中常用的快捷键 浏览器开发工具ideavscode 浏览器 清除浏览器的缓存&#xff1a;ctrl shift delete 开发工具 idea 前端JS代码格式化&#xff1a;ctrl alt L vscode...

前端如何判断浏览器 AdBlock/AdBlock Plus(最新版)广告屏蔽插件已开启拦截

2个月前AdBlock/AdBlock Plus疑似升级了一次 因为自己主要负责面对海外的用户项目&#xff0c;发现以前的检测AdBlock/AdBlock Plus开启状态方法已失效了&#xff0c;于是专门研究了一下。并尝试了很多方法。 已失效的老方法 // 定义一个检测 AdBlock 的函数 function chec…...

ASP.NET Core 如何使用 C# 向端点发出 POST 请求

使用 C#&#xff0c;将 JSON POST 到 REST API 端点&#xff1b;如何从 REST API 接收 JSON 数据。 本文需要 ASP .NET Core&#xff0c;并兼容 .NET Core 3.1、.NET 6和.NET 8。 要从端点获取数据&#xff0c;请参阅本文。 使用 . 将 JSON 数据发布到端点非常容易HttpClien…...

更新无忧:用 Docker 数据卷确保 Open WebUI 数据持久化

在使用 Docker 部署 Open WebUI 时&#xff0c;如何在更新容器的同时确保数据不丢失&#xff0c;始终是工程师们关注的焦点。每次拉取新版镜像、停止并重启容器时&#xff0c;如果没有正确挂载数据卷&#xff0c;配置和数据库数据极易流失&#xff0c;给生产环境带来不必要的麻…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_atomic_cmp_set 函数

目录 修正 执行 ./configure 命令时&#xff0c;输出&#xff1a; checking for OS Linux 6.8.0-52-generic x86_64 checking for C compiler ... found using GNU C compiler gcc version: 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) 所以当前环境是 x86_64 于是在 src…...

为什么我用Python控制仪器比C#慢很多?如何优化性能?

在自动化测试、实验室仪器控制等领域&#xff0c;Python、C# 和 C 是常见的编程语言选择。最近&#xff0c;我在使用 Python 控制仪器时&#xff0c;发现其交互速度明显比 C# 慢很多。这让我感到困惑&#xff0c;毕竟 Python 以其简洁和高效著称&#xff0c;为什么会出现这种情…...

Linux虚拟机克隆

克隆 从现有虚拟机(关机状态)克隆出新虚拟机&#xff0c;右键选择管理>克隆&#xff1a; 选择完整克隆 设置虚拟机名称及存储位置 开机修改系统相关配置 注意: 使用root 用户。 修改vim /etc/sysconfig/network-scripts/ifcfg-ens33 ,修改IP 地址 vim /etc/sysconfig…...

开发完的小程序如何分包

好几次了&#xff0c;终于想起来写个笔记记一下 我最开始并不会给小程序分包&#xff0c;然后我就各种搜&#xff0c;发现讲的基本上都是开发之前的小程序分包&#xff0c;可是我都开发完要发布了&#xff0c;提示我说主包太大需要分包&#xff0c;所以我就不会了。。。 好了…...

气体控制器联动风机,检测到环境出现异常时自动打开风机进行排风;

一、功能&#xff1a;检测到环境出现异常时自动打开风机进行排风&#xff1b; 二、设备&#xff1a; 1.气体控制器主机&#xff1a;温湿度&#xff0c;TVOC等探头的主机&#xff0c;可上报数据&#xff0c;探头监测到异常时&#xff0c;主机会监测到异常可联动风机或声光报警…...

攻防世界33 catcat-new【文件包含/flask_session伪造】

题目&#xff1a; 点击一只猫猫&#xff1a; 看这个url像是文件包含漏洞&#xff0c;试试 dirsearch扫出来/admin&#xff0c;访问也没成功&#xff08;--delay 0.1 -t 5&#xff09; 会的那几招全用不了了哈哈&#xff0c;那就继续看答案 先总结几个知识点 1./etc/passwd&am…...

让文物“活”起来,以3D数字化技术传承文物历史文化!

文物&#xff0c;作为不可再生的宝贵资源&#xff0c;其任何毁损都是无法逆转的损失。然而&#xff0c;当前文物保护与修复领域仍大量依赖传统技术&#xff0c;同时&#xff0c;文物管理机构和专业团队的力量相对薄弱&#xff0c;亟需引入数字化管理手段以应对挑战。 积木易搭…...

Java+vue前后端分离项目集群部署

一、项目概述 假设我们有一个前后端分离的项目&#xff0c;前端使用React或Vue框架&#xff0c;后端使用Spring Boot或Node.js。我们将分别部署前端和后端到集群环境中。 二、准备工作 1. 代码准备&#xff1a;确保前端和后端代码已经开发完成&#xff0c;并通过本地测试。 2…...

【算法解析】(2)分治算法:归并排序和快速排序

1. 分治算法(Divide and Conquer) 分治算法的核心思想是将一个大问题分解为多个小问题,分别解决这些小问题,然后将小问题的解合并起来得到大问题的解。 2. 算法步骤 分治算法通常包含以下三个步骤: 分解(Divide):将原问题分解为若干个规模较小、相互独立、与原问题…...

Qt文本处理【正则表达式】示例详解:【QRegularExpression】

在 Qt 中&#xff0c;正则表达式是处理文本的强大工具&#xff0c;它能够帮助我们匹配、搜索和替换特定的字符串模式。自 Qt 5 起&#xff0c;QRegularExpression 类提供了对 ECMAScript 标准的正则表达式支持&#xff0c;这使得它在处理各种复杂的字符串任务时变得更加高效和灵…...

在 Navicat 17 中扩展 PostgreSQL 数据类型 - 枚举类型

枚举类型 在 Navicat Premium 17 中创建 PostgreSQL 的自定义数据类型的系列中&#xff0c;我们已经探索了多个主题。在 第 1 部分 &#xff0c;我们学习了如何为 免费 DVD 租赁数据库 创建自定义域。上周&#xff0c;我们创建了一个复合类型&#xff0c;用于从用户定义的函数…...

Spring Boot + MyBatis Field ‘xxx‘ doesn‘t have a default value 问题排查与解决

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 执行代码的时候,出现某个字段无法添加 ### Error updating database. Cause: java.sql.SQLException: Field e_f_id doesnt have a default value ### The error may exist in cn...

python基础入门:6.2JSON与CSV数据处理

Python数据处理实战&#xff1a;JSON与CSV高效转换指南 # 天气数据转换示例 import json import csv from datetime import datetimedef process_weather_data(json_file, csv_file):"""将天气JSON数据转换为CSV格式"""with open(json_file, r,…...

尚硅谷课程【笔记】——大数据之Zookeeper【二】

课程视频&#xff1a;【尚硅谷Zookeeper教程】 四、Zookeeper实战 4.1分布式安装部署 1. 集群规划 在Hadoop102、Hadoop103和Hadoop104三个节点上部署Zookeeper 2. 解压安装 1&#xff09;解压Zookeeper.tar.gz到指定目录 tar -zxvf zookeeper-3.7.2.tar.gz -C /opt/mod…...

机器学习常用包matplotlib篇(一)简单图像绘制

前言 Matplotlib 是支持 Python 语言的开源绘图库&#xff0c;简单且完善。 一、环境配置 1.环境设置 在 Notebook 环境绘图时&#xff0c;需先运行 %matplotlib inline 命令&#xff0c;将绘制图形嵌入当前页面。在桌面环境绘图&#xff0c;无需上述命令&#xff0c;而是在…...

JUnit断言方法详解与实战

在Java开发中&#xff0c;JUnit是一个不可或缺的单元测试框架&#xff0c;而org.junit.Assert类中的断言方法则是JUnit的核心功能之一。通过这些方法&#xff0c;我们可以方便地验证代码的正确性。本文将详细介绍一些常用的断言方法&#xff0c;并通过实例展示它们的使用。 一、…...

npm运行Vue项目报错 error:0308010c:digital envelope routines::unsupported

大家好&#xff0c;我是 程序员码递夫。 问题 VSCode 运行Vue项目&#xff0c;提示错误&#xff1a; building 2/2 modules 0 activeError: error:0308010c:digital envelope routines::unsupported 解决方法 原因是 npm 高版本(大于17)&#xff0c;对ssl的处理做了改进&…...

C语言操作符详解

引言 C语言作为一种强大而灵活的编程语言&#xff0c;操作符是其重要组成部分。操作符用于执行各种运算&#xff0c;如算术运算、逻辑运算、比较运算等。深入理解C语言操作符&#xff0c;能帮助开发者编写出高效、准确的代码。 算术操作符 基本算术操作符 - &#xff08;加法…...

Lucene 中的并发错误:如何修复乐观并发失败

作者&#xff1a;来着 Elastic Benjamin Trent 及 Ao Li 感谢 CMU PASTA 实验室开发的确定性并发测试框架 Fray&#xff0c;我们找到了一个棘手的 Lucene 漏洞并将其修复。 是的&#xff0c;另一个修复错误博客。但这个故事有一个转折&#xff0c;一位开源英雄突然出现并拯救了…...

Oracle的学习心得和知识总结(三十三)|Oracle数据库数据库的SQL ID的底层计算原理分析

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…...

C# OpenCV机器视觉:智能水果采摘

在一个风景如画的小镇边上&#xff0c;有一座阿强家祖传的果园。每到水果成熟的季节&#xff0c;果园里硕果累累&#xff0c;红彤彤的苹果、黄澄澄的梨子、紫莹莹的葡萄&#xff0c;散发着诱人的香气。然而&#xff0c;这丰收的喜悦却总被一件烦心事笼罩 —— 摘水果。 “哎呀…...

逻辑回归不能解决非线性问题,而svm可以解决

逻辑回归和支持向量机&#xff08;SVM&#xff09;是两种常用的分类算法&#xff0c;它们在处理数据时有一些不同的特点&#xff0c;特别是在面对非线性问题时。 1. 逻辑回归 逻辑回归本质上是一个线性分类模型。它的目的是寻找一个最适合数据的直线&#xff08;或超平面&…...

celery + redis - 入门

文章目录 一、基本使用编写任务启动服务创建生产者获取状态和结果二、多目录结构异步执行编写服务启动服务调用服务获取结果https://www.bilibili.com/video/BV1jg4y13718 https://www.cnblogs.com/pyedu/p/12461819.html 一、基本使用 编写任务 celery_task.py import cel…...

SAP-ABAP:在LOOP循环中 ASSIGNING FIELD-SYMBOL的使用代码详解

在ABAP中&#xff0c;ASSIGNING FIELD-SYMBOL的作用是直接引用内表行的数据&#xff0c;避免不必要的数据复制&#xff0c;从而提升性能和代码效率。以下是其核心作用和优势&#xff1a; 基本语法 LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>)." 处理逻辑 ENDLOOP.i…...

SpringBoot启动流程简略版

启动入口 (main 方法) ↓ SpringApplication 初始化 ↓ 加载配置 (application.properties/yml) ↓ 创建 ApplicationContext ↓ 刷新 ApplicationContext ↓ - 加载 Bean 定义 - 执行自动配置 - 实例化 Bean - 依赖注入 - 调用初…...

Python:凯撒密码

题目内容&#xff1a; 凯撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法&#xff0c;它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符&#xff0c;对应关系如下&#xff1a; 原文&#xff1a;A B C D E F G H I J K L M N O P Q R …...

element-plus 解决el-dialog背后的页面滚动问题,及其内容有下拉框出现错位问题

这个问题通常是因为 el‑dialog 默认会锁定 body 的滚动&#xff08;通过给 body 添加隐藏滚动条的样式&#xff09;&#xff0c;从而导致页面在打开对话框时跳转到顶部。解决方法是在使用 el‑dialog 时禁用锁定滚动功能。 <el-dialogv-model"dialogVisible":lo…...