- oc- Runloop的理解
雨天多久就
什么是runloop?从字面上理解,是一个运行循环。一般情况下,我们写一个函数,从函数调用开始到函数结束,执行完后,函数的任务就完成了,函数对应的内存都会被系统收回。但是如果我们想函数能够一直执行,该怎么做?这个时候在函数内部写一个死循环就可以了。这样这个函数就永远都在。系统的runloop大致也是这个道理。它就是一个事件循环机制,遇到有处理的事情就处理,没有的话就休眠进行等待唤醒。不同的是,系统
- OC-字符串
SauronKing
程序设计-Object-Ciosobjective-c
前言本篇文章介绍OC的字符串字符串常量要使用Objective-C语言创建一个常量字符串对象,需要在字符串开头放置一个@字符,下面的语句创建了一个常量字符串@"Programoningisfun"NSLogNSLog函数可以打印格式化对象,类似于C语言的printf看下面的例子:intmain(intargc,constchar*argv[]){@autoreleasepool{NSString*
- swift基础语法
超Pro
iOS开发swift开发语言ios
swift学习笔记参考教程https://www.runoob.com/swift/swift-data-types.htmlswift代码规范https://juejin.cn/post/71294653083764654221环境搭建必须要有苹果电脑且安装Xcode2基本语法Swift是类型安全的语言,编译时会进行类型检查importCocoavarmySting="Hello,World!"
- oc-底层原理之objc_msgSend方法快速查找
沉默Coder
在oc-底层原理分析之Cache_t一文中我们对方法的缓存进行了探讨,这篇文章我们在来研究一下方法的查找方法的查找有两条线路:快速查找(通过汇编实现)慢速查找(通过c实现)(下一篇文章再来探究)方法快速查找方法的快速查找实际是通过缓存来查找,在探究之前,我们先来了解一下objc_msgSend,我们要知道方法的查找是在什么时机通过什么入口进入的objc_msgSend我们知道objective-c
- Swift学习笔记
GQJY
defer修饰函数内任意一段代码,调用时机;在函数中其余代码都执行完毕,函数即将结束前,可以用它在异常中进行扫尾工作,比如关闭IO流释放资源等extension通过增加的实例方法可以修改实例本身,如果结构体和枚举的方法要修改self或其属性,则需要使用mutating关键字标明扩展可以向已存在的类结构体和枚举添加新的嵌套类型在结构体、枚举、或者协议中使用mutating修饰方法可以在该方法内部修改
- Swift学习笔记 ——(一)
xhsdnn
iosiosswiftgrammarapple
前言作为一个前端开发者,经常与javaacript(以下简称:js)打交道。最近想了解一下ios开发,前两天看了一下objective-c(以下简称:oc),相对于js来说还是有很多不同的,但是语言还是很多相通的地方,加上之前了解一些java,理解起来不是很困难。在网上看了很多对oc和swift的评价,褒贬不一,心里想着,如果是ios开发的话,这两种肯定都要学,所以这两天对swift进行了了解。对
- Swift学习笔记六:常见概念(一)
英雄有梦
Swift专栏:大家和我从头学swift概念date
七、常见概念1.范围Range、ClosedRange和NSRange的使用//区间分为闭区间和半开区间importFoundationletclosedRange:ClosedRange=1...3//闭区间letintArray=["1","2","3","4","5"]intArray[closedRange]//使用闭区间,获得数组中的从第2个位置开始,至第4个位置的所有元素,并返回由这三
- Swift学习笔记二:数据类型
英雄有梦
Swift专栏:大家和我从头学swift数据类型
6.Swift中的元组(Tuples)//元组:包含不同的数据类型,并组成一个复合值,使用逗号隔开,并使用括号括起来的0个或多个类型组成的列表。lethttp500Error=(500,"Internalsevererror")let(statusCode,statusMessage)=http500Error//可以将元组赋值给一个带有元素名称的元组,元素名称的个数要和元组一一对应statusC
- Swift学习笔记(5):集合类型
weixin_30376163
swift
目录:数组:Array集合:Set字典:DictionarySwift提供Array(有序集合数据)、Set(无序无重复集合)和Dictionary(无序键值对集合)三种基本集合类型来存储明确数据类型的集合数据。使用var将集合声明为变量,可以在创建之后添加、移除、修改集合内数据项。如果使用let将集合声明为常量,则它的大小和内容就都不可改变。数组:Array初始化和赋值:varsomeInts=
- Swift学习笔记(1):基础部分
吃素的小动物
swift操作系统
目录:分号常量和变量数据类型数值型类型转换类型别名元组可选类型API版本检查分号Swift并不强制要求你在每条语句的结尾处使用分号(;),你也可以按照自己的习惯添加分号。如果在一行内写多条独立的语句情况下必须要用分号。常量和变量使用let定义常量,使用var定义变量,常量和变量必须在使用前声明,且可以使用Unicode字符声明:不能包含数学符号,箭头,保留的(或者非法的)Unicode码位,连线与
- Swift学习笔记(6):控制流
weixin_30892987
swift
目录:For-InWhileIf-Else,Guard-ElseSwitch控制转移For-In可以使用for-in语句循环遍历集合、区间、元组、字符串。//遍历区间,返回元素值forindexin1...5{print("(index)times5is(index*5)")}//循环区间,忽略元素值for_in1...power{answer*=base}//遍历数组letnames=["Ann
- swift学习笔记之---数组、字典、枚举、结构体
weixin_34356310
swift
1、数组-Arraylettypes=["none","warning","error"]//省略类型的数组声明letmenbers=[String]()//声明一个空数组menbers.append("six")//添加元素menbers+=["seven"]//添加元素menbers.insert("one",atIndex:0)//指定位置添加元素menbers[0]="message"//
- Swift学习笔记之基本数据类型-数组与字典
安静的偏执
iOS开发swift
1.代码示例//:Playground-noun:aplacewherepeoplecanplayimportCocoa//声明数组varmyList=["hello",3]//打印数组中的值foriteminmyList{print(item)}print("\n")//打印数组中指定的值print("数组中第二个值为\(myList[1])\n")//打印数组的大小print("数组长度为\(
- swift学习笔记——集合类型(数组)
dxldy0614
swiftswift数组
数组数组的声明:ArraySomeType[]varshoppingList:String[]=["Eggs","Milk"]varshoppingList1:Array=["fff","sss","aaa"]//shoppingList已经被构造并且拥有两个初始项。因为swift可以自己推断类型上面的句子也可以写成varshoppingList=["Eggs","Milk"]获取数组元素个数pr
- Swift学习笔记第二节:数组类型
SmallTeddy
Swiftswift学习笔记
1、代码importFoundationletarr1=[1,2,3,4,5,6]letarr2=["a","b","c","d","e","f"]letarr3=[true,false,true]letarr4:Array=[1,2,3]letarr5:[Int]=[1,2,3]letarr6=Array([1,2,3])letarr7=Array(1...3)letarr8=Array(rep
- OC-获取当前展示视图控制器
不言弃zxf
+(UIViewController*)getCurrentVC{UIViewController*result=nil;UIWindow*window=[[UIApplicationsharedApplication]keyWindow];//app默认windowLevel是UIWindowLevelNormal,如果不是,找到UIWindowLevelNormal的if(window.win
- Swift学习笔记第三节:Set类型
SmallTeddy
Swiftswift学习笔记
1、代码importFoundationvarset1:Set=[1,2,3,4,3]print("定义1:\(set1)")varset2=Set(1...4)print("定义2:\(set2)")print("长度:\(set2.count)")print("是否为空:\(set2.isEmpty)")set1.insert(99)set1.update(with:33)print("插入:
- OC-嵌套滑动手势冲突解决
SK丿希望
前言(说实话我也不知道说啥好)列表嵌套滑动在如今的App开发中经常用到,本文是对手势冲突进行一次简单的处理image.png说下布局图1为自定义UITableView即为最底层的父层图2为一个普通的UIView可以添加图片/轮播等等图3为UITableView一般就是在这里显示数据了实现UI设置1.首先,将图1自定义UITableView,遵守协议,实现以下方法/**同时识别多个手势*/-(BOO
- OC-关联对象的原理
蒋斌文
面试题-CategoryCategory能否添加成员变量?如果可以,如何给Category添加成员变量?学习内容image-20210421123509653image-20210421123528192image-20210421123555533一.如何给分类添加成员变量思考一下:分类中能否添加属性?能否添加成员变量?我们知道,如果在类中添加如下属性,@property(assign,nona
- 《Swift学习笔记》09 - 函数的简单介绍
ShIwEn9
介绍:Swift语言由苹果公司在2014年推出,用来撰写MacOS和iOS应用程序,并且Swift还是开源的,开源地址:https://github.com/apple/swift,同时附上官方博客地址:https://swift.org目前Swift已经发展到了第五版本。显然苹果大有推翻OC“江山”的意思.今天就来初探一下Swift,看看究竟为何swift有这么大的能力。参考内容:Swift中文
- OC-网络音频播放
紫云夕月
#import/***正在播放回调*@paramcurrentTime时间显示label.text*@paramcurrentProgress播放进度slider.value*/typedefvoid(^OnPlayingBlock)(Float64currentTime,CGFloatcurrentProgress);/***准备播放回调*@paramtotalDuration音频总时长*/ty
- 微星主板开启VT
wangjunicode
笔记
微星主板模拟器使用开启VT进入BIOS高级-》OC-》CPU特征-》intel虚拟化技术-》允许
- OC-编译错误
彭同学她同桌
OCios
明明包含了头文件,但是还是显示未知的类型可能这个头文件被某个宏包住了#ifdefined(__cplusplus)在C++代码中包含了一个C的头文件会显示这个错误“theutillibonlybeusedinc++”,此时用#ifdefined(__cplusplus)#endif包一下就行了,但是注意比如说a.h包含了这个宏,那么所有包含了a.h的文件都必须是c++文件也就是.mm文件,如果a.
- 折腾 7080MFF 黑苹果 - Part2
Poto_L
记录升级Bigsur11.6.1遇到的一些问题(PS:用U盘来测试,弄好之后再替换到启动盘中,否则可能出现启动卡界面的问题)升级Opencore版本,0.6.1至OpenCore-0.7.4-RELEASE(PS:为了简单,都只是替换必要的文件)直接替换相应的文件升级升级kexts,替换最新的驱动WhateverGreen、Lilurelease版本,其他的没有更新(EFI->OC->Kexts)
- Swift学习笔记-继承
女粉丝
1.方法的重写需要在重写的方法前加override。overridefuncmakeNoise(){print("这是子类")}在属性someProperty的getter或setter的重写实现中,可以通过super.someProperty来访问超类版本的someProperty属性。在下标的重写实现中,可以通过super[someIndex]来访问超类版本中的相同下标。2.重写属性///相当
- OC-本地音频播放
紫云夕月
#import@interfaceLilyLocalPlayer:NSObject@property(nonatomic,copy)void(^completePlayingBlock)(void);//播放完毕+(LilyLocalPlayer*)sharedAudioPlayer;//实列化//初始化播放器-(void)createAudioPlayerWith:(NSString*)path
- swift学习笔记(二)类和结构体、内存管理
d14888bcdd2b
六、类与结构体结构体swift中结构体和类十分相似,即可定义属性,又可以定义方法,但不具有继承的特性。使用struct定义结构体,结构体中声明变量或者常量作为结构体属性,可以创建函数作为结构体的方法,用点语法调用属性和方法。structCar{//价格varprice:NSInteger//品牌varbrand:String//油量varpetrol:NSInteger//提供一个驾驶方法muta
- Swift学习笔记 - Swift属性只读
W_C__L
swift学习笔记swift
在OC中我们经常用到只读属性,用readonly修饰一下就行了,但在Swift中已经不是这样修饰的了,下面记录一下Swift中只读属性的使用在OC中的只读://只读属性@property(readonly,nonatomic)NSObject*wcl;在Swift中的只读://只读属性private(set)varwcl
- OC-多线程的理解和使用(转)
SK丿希望
转自:https://www.jianshu.com/p/9e9316b52575谈到编程,就离不开多线程。多线程提升了系统资源的利用率,使得程序在相同时间单位里可以做更多的事情,是我们每个程序员都必须掌握的重要知识。什么是线程线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个
- IOS-swift学习笔记(持续更新)
Tmylyh
iosiosswift学习开发语言
目录基础知识获取字符串长度swichcase语句数组的创建编辑数组的编辑编辑数组的排序编辑数组的遍历编辑字典的增删改查编辑函数设置可变的函数参数数量函数的嵌套常用的内置函数枚举类类的初始化类的set和get类的静态方法类的析构函数编辑闭包计算属性存储属性的属性观察者类型属性访问权限编辑值类型和引用类型基础知识四种输出方式:整数类型和实例属性,Swift提供的有符号和无符号类型有8、16、32、64
- PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
javaUIlinuxPHPandroid
╔-----------------------------------╗┆
- zookeeper admin 笔记
braveCS
zookeeper
Required Software
1) JDK>=1.6
2)推荐使用ensemble的ZooKeeper(至少3台),并run on separate machines
3)在Yahoo!,zk配置在特定的RHEL boxes里,2个cpu,2G内存,80G硬盘
数据和日志目录
1)数据目录里的文件是zk节点的持久化备份,包括快照和事务日
- Spring配置多个连接池
easterfly
spring
项目中需要同时连接多个数据库的时候,如何才能在需要用到哪个数据库就连接哪个数据库呢?
Spring中有关于dataSource的配置:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
&nb
- Mysql
171815164
mysql
例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WI
TH GRANT OPTION;
如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作
- CommonDAO(公共/基础DAO)
g21121
DAO
好久没有更新博客了,最近一段时间工作比较忙,所以请见谅,无论你是爱看呢还是爱看呢还是爱看呢,总之或许对你有些帮助。
DAO(Data Access Object)是一个数据访问(顾名思义就是与数据库打交道)接口,DAO一般在业
- 直言有讳
永夜-极光
感悟随笔
1.转载地址:http://blog.csdn.net/jasonblog/article/details/10813313
精华:
“直言有讳”是阿里巴巴提倡的一种观念,而我在此之前并没有很深刻的认识。为什么呢?就好比是读书时候做阅读理解,我喜欢我自己的解读,并不喜欢老师给的意思。在这里也是。我自己坚持的原则是互相尊重,我觉得阿里巴巴很多价值观其实是基本的做人
- 安装CentOS 7 和Win 7后,Win7 引导丢失
随便小屋
centos
一般安装双系统的顺序是先装Win7,然后在安装CentOS,这样CentOS可以引导WIN 7启动。但安装CentOS7后,却找不到Win7 的引导,稍微修改一点东西即可。
一、首先具有root 的权限。
即进入Terminal后输入命令su,然后输入密码即可
二、利用vim编辑器打开/boot/grub2/grub.cfg文件进行修改
v
- Oracle备份与恢复案例
aijuans
oracle
Oracle备份与恢复案例
一. 理解什么是数据库恢复当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失。因此当发生上述故障后,希望能重构这个完整的数据库,该处理称为数据库恢复。恢复过程大致可以分为复原(Restore)与
- JavaEE开源快速开发平台G4Studio v5.0发布
無為子
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V5.0版本已经正式发布。
访问G4Studio网站
http://www.g4it.org
2013-04-06 发布G4Studio_V5.0版本
功能新增
(1). 新增了调用Oracle存储过程返回游标,并将游标映射为Java List集合对象的标
- Oracle显示根据高考分数模拟录取
百合不是茶
PL/SQL编程oracle例子模拟高考录取学习交流
题目要求:
1,创建student表和result表
2,pl/sql对学生的成绩数据进行处理
3,处理的逻辑是根据每门专业课的最低分线和总分的最低分数线自动的将录取和落选
1,创建student表,和result表
学生信息表;
create table student(
student_id number primary key,--学生id
- 优秀的领导与差劲的领导
bijian1013
领导管理团队
责任
优秀的领导:优秀的领导总是对他所负责的项目担负起责任。如果项目不幸失败了,那么他知道该受责备的人是他自己,并且敢于承认错误。
差劲的领导:差劲的领导觉得这不是他的问题,因此他会想方设法证明是他的团队不行,或是将责任归咎于团队中他不喜欢的那几个成员身上。
努力工作
优秀的领导:团队领导应该是团队成员的榜样。至少,他应该与团队中的其他成员一样努力工作。这仅仅因为他
- js函数在浏览器下的兼容
Bill_chen
jquery浏览器IEDWRext
做前端开发的工程师,少不了要用FF进行测试,纯js函数在不同浏览器下,名称也可能不同。对于IE6和FF,取得下一结点的函数就不尽相同:
IE6:node.nextSibling,对于FF是不能识别的;
FF:node.nextElementSibling,对于IE是不能识别的;
兼容解决方式:var Div = node.nextSibl
- 【JVM四】老年代垃圾回收:吞吐量垃圾收集器(Throughput GC)
bit1129
垃圾回收
吞吐量与用户线程暂停时间
衡量垃圾回收算法优劣的指标有两个:
吞吐量越高,则算法越好
暂停时间越短,则算法越好
首先说明吞吐量和暂停时间的含义。
垃圾回收时,JVM会启动几个特定的GC线程来完成垃圾回收的任务,这些GC线程与应用的用户线程产生竞争关系,共同竞争处理器资源以及CPU的执行时间。GC线程不会对用户带来的任何价值,因此,好的GC应该占
- J2EE监听器和过滤器基础
白糖_
J2EE
Servlet程序由Servlet,Filter和Listener组成,其中监听器用来监听Servlet容器上下文。
监听器通常分三类:基于Servlet上下文的ServletContex监听,基于会话的HttpSession监听和基于请求的ServletRequest监听。
ServletContex监听器
ServletContex又叫application
- 博弈AngularJS讲义(16) - 提供者
boyitech
jsAngularJSapiAngularProvider
Angular框架提供了强大的依赖注入机制,这一切都是有注入器(injector)完成. 注入器会自动实例化服务组件和符合Angular API规则的特殊对象,例如控制器,指令,过滤器动画等。
那注入器怎么知道如何去创建这些特殊的对象呢? Angular提供了5种方式让注入器创建对象,其中最基础的方式就是提供者(provider), 其余四种方式(Value, Fac
- java-写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。
bylijinnan
java
public class CommonSubSequence {
/**
* 题目:写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。
* 写一个版本算法复杂度O(N^2)和一个O(N) 。
*
* O(N^2):对于a中的每个字符,遍历b中的每个字符,如果相同,则拷贝到新字符串中。
* O(
- sqlserver 2000 无法验证产品密钥
Chen.H
sqlwindowsSQL ServerMicrosoft
在 Service Pack 4 (SP 4), 是运行 Microsoft Windows Server 2003、 Microsoft Windows Storage Server 2003 或 Microsoft Windows 2000 服务器上您尝试安装 Microsoft SQL Server 2000 通过卷许可协议 (VLA) 媒体。 这样做, 收到以下错误信息CD KEY的 SQ
- [新概念武器]气象战争
comsci
气象战争的发动者必须是拥有发射深空航天器能力的国家或者组织....
原因如下:
地球上的气候变化和大气层中的云层涡旋场有密切的关系,而维持一个在大气层某个层次
- oracle 中 rollup、cube、grouping 使用详解
daizj
oraclegroupingrollupcube
oracle 中 rollup、cube、grouping 使用详解 -- 使用oracle 样例表演示 转自namesliu
-- 使用oracle 的样列库,演示 rollup, cube, grouping 的用法与使用场景
--- ROLLUP , 为了理解分组的成员数量,我增加了 分组的计数 COUNT(SAL)
- 技术资料汇总分享
Dead_knight
技术资料汇总 分享
本人汇总的技术资料,分享出来,希望对大家有用。
http://pan.baidu.com/s/1jGr56uE
资料主要包含:
Workflow->工作流相关理论、框架(OSWorkflow、JBPM、Activiti、fireflow...)
Security->java安全相关资料(SSL、SSO、SpringSecurity、Shiro、JAAS...)
Ser
- 初一下学期难记忆单词背诵第一课
dcj3sjt126com
englishword
could 能够
minute 分钟
Tuesday 星期二
February 二月
eighteenth 第十八
listen 听
careful 小心的,仔细的
short 短的
heavy 重的
empty 空的
certainly 当然
carry 携带;搬运
tape 磁带
basket 蓝子
bottle 瓶
juice 汁,果汁
head 头;头部
- 截取视图的图片, 然后分享出去
dcj3sjt126com
OSObjective-C
OS 7 has a new method that allows you to draw a view hierarchy into the current graphics context. This can be used to get an UIImage very fast.
I implemented a category method on UIView to get the vi
- MySql重置密码
fanxiaolong
MySql重置密码
方法一:
在my.ini的[mysqld]字段加入:
skip-grant-tables
重启mysql服务,这时的mysql不需要密码即可登录数据库
然后进入mysql
mysql>use mysql;
mysql>更新 user set password=password('新密码') WHERE User='root';
mysq
- Ehcache(03)——Ehcache中储存缓存的方式
234390216
ehcacheMemoryStoreDiskStore存储驱除策略
Ehcache中储存缓存的方式
目录
1 堆内存(MemoryStore)
1.1 指定可用内存
1.2 驱除策略
1.3 元素过期
2 &nbs
- spring mvc中的@propertysource
jackyrong
spring mvc
在spring mvc中,在配置文件中的东西,可以在java代码中通过注解进行读取了:
@PropertySource 在spring 3.1中开始引入
比如有配置文件
config.properties
mongodb.url=1.2.3.4
mongodb.db=hello
则代码中
@PropertySource(&
- 重学单例模式
lanqiu17
单例Singleton模式
最近在重新学习设计模式,感觉对模式理解更加深刻。觉得有必要记下来。
第一个学的就是单例模式,单例模式估计是最好理解的模式了。它的作用就是防止外部创建实例,保证只有一个实例。
单例模式的常用实现方式有两种,就人们熟知的饱汉式与饥汉式,具体就不多说了。这里说下其他的实现方式
静态内部类方式:
package test.pattern.singleton.statics;
publ
- .NET开源核心运行时,且行且珍惜
netcome
java.net开源
背景
2014年11月12日,ASP.NET之父、微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET 扩展为可在 Linux 和 Mac OS 平台上运行。.NET核心运行时将基于MIT开源许可协议发布,其中将包括执行.NET代码所需的一切项目——CLR、JIT编译器、垃圾收集器(GC)和核心
- 使用oscahe缓存技术减少与数据库的频繁交互
Everyday都不同
Web高并发oscahe缓存
此前一直不知道缓存的具体实现,只知道是把数据存储在内存中,以便下次直接从内存中读取。对于缓存的使用也没有概念,觉得缓存技术是一个比较”神秘陌生“的领域。但最近要用到缓存技术,发现还是很有必要一探究竟的。
缓存技术使用背景:一般来说,对于web项目,如果我们要什么数据直接jdbc查库好了,但是在遇到高并发的情形下,不可能每一次都是去查数据库,因为这样在高并发的情形下显得不太合理——
- Spring+Mybatis 手动控制事务
toknowme
mybatis
@Override
public boolean testDelete(String jobCode) throws Exception {
boolean flag = false;
&nbs
- 菜鸟级的android程序员面试时候需要掌握的知识点
xp9802
android
熟悉Android开发架构和API调用
掌握APP适应不同型号手机屏幕开发技巧
熟悉Android下的数据存储
熟练Android Debug Bridge Tool
熟练Eclipse/ADT及相关工具
熟悉Android框架原理及Activity生命周期
熟练进行Android UI布局
熟练使用SQLite数据库;
熟悉Android下网络通信机制,S