【Effective Objective-C】——对象、消息、运行期
文章目录
- 概述
- 理解“属性”这一概念
- 属性特质
- atomic和nonatomic的区别?
- 尽量将所有属性都声明为nonatomic
- 要点
- 在对象内部尽量直接访问实例变量
- 理解:“对象等同性”这一概念
- 特定类所具有的等同判定方法
- 等同性判定的执行深度
- 容器中可变类的等同性
- 以“类族模式”隐藏实现细节
- 创建类族
- Cocoa里的类族
- 在既有类中使用关联对象存放自定义数据
- 理解objc_msgSend的作用
- 理解消息转发机制
- 动态方法解析
- 备援接收者
- 完整的消息转发
- 消息转发全流程
- 用“方法调配技术”和“黑盒方法”
- 理解“类对象”的用意
- 在类继承体系中查询类型信息
概述
OC是面向对象语言,其中“对象”就是基本 “基本构造单元”;在对象之间传递数据并执行任务的过程就叫做 “消息传递”;当应用程序运行起来后,为其提供相关支持的代码就称为 “Objective-C的运行期环境”。
理解“属性”这一概念
“属性”是Objective-C的一项特性,用来封装数据。OC对象通常会把其所需要的数据保存为各种实例变量。实例变量一般通过“存取方法”来访问。其中“获取方法用来读取变量值”,而“设置方法”用来卸乳变量值。
- 访问属性时,使用“点语法”和直接调用存取方法之间没有丝毫差别;因为 编译器会把“点语法”转化为对存取方法的调用。
- 编译器会为属性自动合成存取方法,若不想让编译器自动合成存取方法,可以使用
@dynamic
关键字。例如:
@interface EOCPerson : NSManageObject
@property NSString *firstName;
@end@implementation
@dynamic firstName;
@end
编译器就不会再为上面的这个类自动合成存取方法或实例变量。
属性特质
- 原子性:在默认情况下,由编译器所合成的方法
会通过锁定机制确保其原子性
。但是当属性具备nonatomic
特质,则不使用同步锁。尽管没有名为“automic”的特质,但是只要属性不具有nonatomic特质,那么它就时“原子性”的。 - 读写权限:
(1)具备readwrite(
读写)特质的属性拥有“获取方法”和“设置方法(setter)”。若该属性由@synthesize
实现,则编译器会自动生成这两个方法。
(2)具备readonly
(只读)特质的属性仅拥有获取方法。 - 内存管理语义:
(1)assign
:“设置方法”只会执行针对“纯量类型”(例如CGFloat、NSInteger等)的 简单赋值操作。
(2)strong
:拥有此此特质的属性,当为这种属性设置新值时,设置方法会 先保留新值,并释放旧值,然后在将新值赋上去。
(3)weak
:拥有此此特质的属性,当为这种属性设置新值时,设置方法会 既不会保留新值,也不会释放旧值;然而在属性所指的对象遭到摧毁时,属性值也会清空。
(4)unsafe_unretained
:此特质的语义与assign相同,但是它适用于“对象类型” 该特质表达一种“非拥有关系”(unretain,不保留),当目标对象被摧毁时,属性值不会自动清空,这一点与weak有区别。
(5)copy
:此特质所表达的所属关系与strong相类似。然而设置方法并不保留新值,而是将其“拷贝”
。相当于拷贝一份新的对象,然后对其操作。
atomic和nonatomic的区别?
具备atomic特质的获取方法会通过锁定机制
来确保操作的原子性。也就是说,如果两个线程读写同一属性,那么不论何时,总能看到有效的属性值;若是不加锁的话,当其中一个线程读写属性时,另外一个线程突然闯入把未修改好的值读取出来。这种情况就会导致读取的值可能不对。
尽量将所有属性都声明为nonatomic
这样做的原因:在iOS中使用同步锁的开销较大,这会带来性能问题。一般情况下,并不要求属性必须时“原子的”,因为这并不能保证“线程安全”,若要保证线程安全,还得采用更为深层的锁定机制。
要点
- 可以用@property语法来定义对象中封装的数据。
- 通过“特质”来指定存储数据时所需的正确语义。
- 在设置属性所对应的实例变量时,一定要遵从该属性所声明的语义。
- 开发iOS程序时应该使用nonatomic属性,因为atomic属性会严重影响性能。
在对象内部尽量直接访问实例变量
在写入实例变量时,通过其“设置方法”来做,而在读取实例变量时,则直接访问。之所以要通过“设置方法”来写入实例变量,其首要原因在于,这样做能够确保相关的“内存管理语义”得以贯彻。但是需要注意几个问题:
- 在
初始化方法中直接访问实例变量
,因为子类kennel会重写设置方法。 “惰性初始化”
(懒加载),在这种情况下,必须通过“获取方法”来访问属性,否则实例变量就永远不会初始化。 类似下面代码:
//这个属性不经常用,且创建该属性的成本较高,就可以“惰性初始化”。
- (EOCBrain*)brain {if (!_brain) {_brain = [Brain new];}return _brain;
}
若没有“获取方法”就直接访问实例变量,则会看到尚未设置好的brain,所以说,如果使用了“惰性初始化”,就必须通过存取方法来访问brain属性。
要点:
- 在对象内部读取数据时,应该直接通过实例变量来读,而写入数据时,则应通过属性来写。
- 在初始化方法及dealloc方法中,总是应该直接通过实例变量来读写数据。
- 有时会使用惰性初始化技术配置某份数据,这种情况下,需要通过属性来读取数据。
理解:“对象等同性”这一概念
有时候使用 “ == ”并不能得到我们想要的结果,因为“ ==”比较的是两个指针本身,而不是其所指的对象。应该使用“isEqual:”方法来判断两个对象的等同性。不了解i“sEqual:”和“ ==”的,可以看一下这篇博客:【iOS】——==与isEqual方法。
- NSObject协议中有两个用于判断等同性的关键方法:
- (BOOL)isEqual:(id)object;
- (NSUInteger)hash;
NSObject类对这两个方法的默认实现是:当且仅当其“指针值”完全相等时
,这两个对象才相等。
2. 如果“isEqual:
”方法判定两个对象相等,那么其hash
方法也必须返回同一个值。但是如果两个对象的hash方法返回同一个值,那么“isEqual:”方法未必会认为两者相等。
3. 在实现两个方法时:isEqual
方法可以根据自己的需求来重写,hash
方法最好返回 对象的每个属性的hash值进行与运算的结果。
特定类所具有的等同判定方法
除了刚才提到的NSString之外,NSArray
与NSDictionary
类也具有特殊的等同性判断方法,前者为“isEqualToArray:
”,后者为“isEqualToDictionary:
”。如果和其比较的对象不是数组或字典,那么这两个方法会抛出异常。因为OC在编译期不做强类型检查,所以开发者要保证所传对象的类型时正常的
。
在自己编写判定方法时,要一并重写“isEqual:
”方法。后者实现法方式为:如果受测的参数与接受消息的对象都属于同一个类,那么就调用自己编写的判定方法,否则就交由超类判断。像下面代码写的一样:
等同性判定的执行深度
以NSArray为例,NSArray的检测方法为先看两个数组所含对象个数是否相同,若相同则在每个对应的位置的两个对象身上调用其isEqual:
方法。如果对应位置上的对象均相等,那么这两个数组就相等,这叫做“深度等同性判断”。有时候可以比较唯一不变的标识符
,若标识符一样,则可判定为两个对象相同。
容器中可变类的等同性
当把某个对象放入collection
后,就不应该再改变其哈希码了。因为collection
会把各个对象按照其哈希码分装到不同的“箱子数组”中。如果某对象在放入“箱子”之后,哈希码又发生变化,那么其所处的这个箱子对他来说就是“错误”的。
要点:
- 若想检测对象的等同性,请提供
isEqual:
方法和hash
方法。 - 相同的对象必须具有相同的哈希码,但是两个哈希码相同的对象却未必相同。
- 不要盲目地逐个检测每条属性,而是应该按照具体需求来制定检测方案。
- 编写hash方法时,应该使用计算速度快而且哈希码碰撞纪律低的算法算法。
以“类族模式”隐藏实现细节
“类族”是一种很有用的模式,可以隐藏“抽象基类”背后的实现细节。
创建类族
首先定义抽象基类,将一些状态等变量用枚举、switch语句
等来完成,然后新建一个类,声明一些方法,然后再创建一个新类(实体子类
),继承前面那个类,然后实现在基类中声明的方法。这其实是一种“工厂模式
”。
Cocoa里的类族
- 判断某个实例所属的类是否位于类族中,使用类型信息查询方法,不能直接检测两个“类对象”是否等同,而应该采用下列代码:
id maybeAnArray = /*...*/
if(maybeAnArray isKindOfClass:[NSArray class]) {//will be hit
}
- 我们经常需要新增实体子类,若是没有“工厂方法”的源代码,就无法向其中新增类别了。对于Cocoa中的NSArray这种类族来说,还是有方法新增的,但是需要遵守下面几条规定:
- 子类应该继承自类族中的抽象基类。
- 子类应该定义自己的数据存储方式。
- 子类应当重写超类文档中指明需要重写的方法。
要点:
3. 类族模式可以把实现细节隐藏在一套简单的公共借口后面。
4. 系统框架中经常使用类族
5. 从类族的公共抽象基类中继承子类时要当心,若有开发文档,则应首先阅读。
在既有类中使用关联对象存放自定义数据
有时需要在对象中存放相关信息。这时我们通常会从对象所属的类中继承一个子类,然后改用这个子类对象。然而并非所有情况下都能这么做,有时候类的实例可能由某种机制所创建的,而开发者无法令这种机制创建出自己所写的子类实例。Objective-C有一项特性可以解决此问题,就是“关联对象
”。
可以给某个对象关联许多其他对象,这些对象通过“键”来区分。存储对象值的时候,可以指明“存储策略”,用以维护相应的“内存管理语义”。存储策略由名为objc_AssociationPolicy
的枚举所定义。下表列出了与之等效的@property
属性:假如关联对象成为了属性,那么它就会具备对应的语义。
以下方法可以管理关联对象:
要点:
- 可以通过“关联对象”机制来把两个对象连起来
- 定义关联对象可以制定内存管理语义,用来模仿定义属性时所采用的“拥有关系”与“非拥有关系”。
- 只有在其他做法不可行时才选用关联对象,因为这种做法比使用关联对象要好。
理解objc_msgSend的作用
- 在Objective-C中,如果向某对象传递信息,那就会使用
动态绑定机制
来决定需要调用的方法。在底层所有方法都是普通的C语言函数,然而对象收到消息之后,究竟该调用哪个方法则完全由运行期决定,甚至可以在程序运行时改变。这些特性使Objective- C成为一门真正的动态语言。 - 给对象发送信息可以这样写:
id returnValue = [someObject messageName:parameter];
在本例中,someObject
叫做“接收者”,messageName
叫做“选择子”。==选择子和参数合起来称为“消息”。==编译器看到此条消息后,将其转化为一条标准的C语言函数调用,所调用的函数乃是消息传递机制中的核心函数,叫做objc_masgSend
,其原型如下:
void objc_msgSend(id self, SEL cmd, ...)
这是个“参数可变的函数”,能接受两个或两个以上的参数。第一个参数代表接收者,第二个参数代表选择子(SEL是选择子的类型)后续参数就是消息中的那些参数,其顺序不变。选择子值得就是方法的名字。“选择子”与“方法”这两个词经常交替使用。编译器会把上面那个例子中的消息转化为如下函数:
id returnValue = objc_msgSend(someObject,@selector(messageName:)parameter);
objc_msgSend
函数会依据接收者与选择子的类型来调用适当的方法。为了完成此操作,该方法需要在接受者所属的类中搜寻其“方法列表”,如果能找到与选择子名称相符的方法,则跳至其实现代码。若是找不到,,那就沿着继承体系继续向上找,等找到合适的方法之后再跳转。如果最终还是找不到,那就执行“消息转发”操作。
2. 消息调用情况中的一些“边界情况”,需要由下面的一些函数来处理:
objc_msgSend_stret
:如果待发送的消息要返回结构体,则可使用此函数处理。仅限于返回结构体不是太大的情况下。objc_msgSend_fpret
:如果消息返回的是浮点数,则可使用此函数处理。objc_msgSendSuper
:如果需要给超类发消息,则可使用此函数处理。
要点:
- 消息由接收者、选择子及参数构成。给某对象“发送信息”也就相当于在该对象上“调用方法”。
- 发给某对象的全部消息都要由“动态消息派发系统”来处理,该系统会查出对应的方法,并执行其代码。
理解消息转发机制
上面讲了对象的消息传递机制,并强调了其重要性,这条讲解一下对象在收到无法解读的消息之后会发生什么情况。
- 当对象接收到无法解读的消息时,就会启动“消息转发机制”,程序员就可以将此过程告诉对象应该如何处理未知消息。
- 消息转发分为两大阶段:第一阶段先征询接收者,所属的类,看是否能动态添加方法,已处理当前这个“未知的选择子”,这叫做“动态方法解析”。第二阶段涉及“完整的消息转发机制”。
动态方法解析
对象在收到无法解读的消息后,首先调用其所属类的下列类方法:
+ (BOOL)resolveInstanceMethod:(SEL)selector
该方法的参数就是那个未知的选择子,其返回值为Boolean
类型,表示这个类是否能新增一个实例方法用以处理此选择子。假如尚未实现的方法不是实例方法而是类方法,那么运行期系统就会调用另外一个方法,该方法与“resolveInstanceMethod:”类似,叫做“resolveClassMethod:”。
备援接收者
当前接收者还有第二次机会能处理未知的选择子,在这一步中,运行期会问它:能不能把这条消息转给其他接收者来处理。处理方法如下:
- (id)forwardingTargetForSelector:(SEL)selector
方法参数代表未知的选择子,若当前接收者能找到备援对象,则将其返回,若找不到,就返回nil
。通过此方案,我们可以用“组合”来模拟“多重继承”的某些特性。
注意
:我们无法操作经由这一步所转发的消息。若是想在发送给备援接收者之前修改消息内容,那就得通过完整的消息转发机制来做。
完整的消息转发
当转发已经来到这一步的时候,那么唯一能做的就是启用完整的消息转发转发机制了。
步骤:
- 首先创建NSInvocation对象,把与尚未处理的那条消息有关的全部细节都封于其中。此对象包含选择子、目标及参数。在触发NSInvocation对象时,“消息派发系统”把消息指派给目标对象。此步骤会调用下列方法:
- (id)forwardInvocation:(NSInvocation*)invocation
这个方法可以实现得很简单,只需要改变调用目标,使消息在新目标上得以调用即可。
2. 实现上面方法时,若发现某调用操作不应由本类处理,则需调用超类同名的方法。这样的话,继承体系的每个类都有机会调用此请求,直至NSObject
。如果最后调用了NSObject
类的方法,那么该方法还会继而调用“doesNotRecognizeSelector
:”以抛出异常,此异常表明选择子最终未能得到处理。
消息转发全流程
下图描述了消息转发机制处理消息的各个步骤。
接收者在每一步中均有机会处理消息。步骤越往后,处理消息的代价越大。最好能在第一步就能处理完,这样的话,运行期系统就可以将此方法缓冲起来。
要点:
- 若对象无法响应某个选择子,则进入消息转发流程。
- 通过运行期的动态方法解析功能,我们可以在需要用到用到某个方法时再将其加入类中。
- 对象可以把其无法解读的某些选择子转交给其他对象来处理。
- 经过上述两步之后,如果还没办法处理选择子,那就启动完整的消息转发机制。
用“方法调配技术”和“黑盒方法”
- 既不需要源代码,也不需要通过继承子类来重写方法就能改变这个类本身的功能,这样一来,新功能将在本类的所有实例中生效,而不是仅限于重写相关方法的那些子类实例。此方案称为“方法调配”。
- 类的方法列表会把选择子的名称映射到相关的方法实现之上,使得“动态消息派发系统”能够据此找到应该调用的方法。这些方法均以函数指针的形式来表示,这种指针叫做
IMP
,其原型如下:
id (*IMP)(id, SEL,...)
可以通过选择子,然后找到对应的IMP,就像下图:
- 如何实现互换两个方法?可用下列函数:
void method_exchangeImplementations(Method M1, Method M2)
此函数的两个参数表示待交换的两个方法实现,而实现方法则可通过下列函数获取。
Method class_getInstanceMethod(Class aClass, SEL aSelector)
此函数根据给定的选择从类中取出与之相关的方法。执行下列代码,即可交换前面的lowercaseString和uppercaseString方法实现:
Method originalMethod = class_getInstanceMethod([NSStringclass], @selector(lowercaseString));Method swappedMethod = class_getInstanceMethod([NSStringclass], @selector(uppercaseString));
method_exchangeImplementations(originalMethod, swappedMethod);
从现在开始,如果在NSString实例上调用lowercaseString
方法,那么执行的将是uppercaseString
的原有实现。
- 在现实中其实很少去呼唤两个方法实现,但是可以用这个方法实现增添新功能。通过此方案,开发者可以为那些“完全不知道具体实现的”黑盒方法增加日志记录功能。
要点:
- 在运行期,可以向类中新增或替换选择子所对应的方法实现。
- 使用另一种实现来替换原有的方法实现,这道工序叫做“方法调配”,开发者常用此技术向原有实现中添加新功能。
- 一般来说,只有调试程序的时候才需要在运行期修改方法实现,这种做法不宜滥用。
理解“类对象”的用意
- 一般情况下,应该指明消息接收者的具体类型,这样的话,如果向其发送了无法解读的消息,那么编译器就会产生警告信息。而类型为id的对象则不然,编译器假定它能响应所有的消息。
- “在运行期检视对象类型”这一操作也叫作“类型信息查询”,这个特性内置于
Foundation
框架的NSObject
协议里。 - 每个Objective-C对象实例都是指向某块内存的数据的指针。
- 通用对象类型id本身就是指针。
- 每个对象结构体的首个成员是
Class
类变量。该变量定义了对象所属的类,通常称为“isa
”指针。
在类继承体系中查询类型信息
- 可以用类型信息查询方法来检视类继承体系。“
isMemberOfClass:
”能够判断出对象是否为某个特定类的实例,而“isKindOfClass:
”能够判断出对象是否为某类或派生类的实例。 - 类型信息查询方法使用
isa
指针获取对象所属的类,然后通过super_class
指针在继承体系中游走。 - 应尽量使用类型查询方法,而不应该直接比较两个类对象是否等同,因为前者可以正确处理那些使用了消息传递机制的对象。
要点: - 每个实例都有一个指向Class对象的指针,用以表明其类型,而这些Class对象则构成了类的继承体系。
- 如果对象类型无法在编译器确定,那么就应该使用类型信息查询方法来探知。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- day13-学习笔记
day.13笔记 一.Arrays数组的工具类 1.概念:此类是用来操作数组的各种方法方法的名称方法的描述public static void sort(int[] a)对指定的 int 型数组按数字升序进行排序。该排序算法是一个经过调优的快速排序法public static String toString(int[] a)返回指定数…...
2024/5/1 0:27:25 - 正则,flutter人脸认证
\D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] POSIX 字符类(仅 US-ASCII) \p{Lower} 小写字母字符:[a…...
2024/5/1 3:24:18 - Node中的模块系统
使用Node编写应用程序主要就是在使用: EcmaScript语言和浏览器一样,在Node中没有Bom和Dom核心模块文件操作的fshttp服务操作的httpurl路径操作模块path路径处理模块os操作系统信息第三方模块art-template必须通过npm来下载才可以使用自己写的模块自己创…...
2024/4/30 16:29:26 - 阿里P8财富自由,薪资200W+?看完我慕了呀。
阿里目前校招生的级别均在P5,由此可见P4这个职级已经消失了。主力员工是P6-P8。 对于阿里来有一些业务趋近于边缘化,这类职级为P8的在总部也只是为P7职级。 一、阿里P8一年赚多少钱 阿里目前的薪资分成:薪资期权。工作三年以内一般就是工资…...
2024/4/14 13:11:21 - 牛客真题编程——day1
环境:c 1、连续最大和 一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3 首先使用穷举法,嵌套循环遍历出最大和,但是时间复杂度为n2ÿ…...
2024/4/30 17:56:25 - LinkedList,set和排序总结
1.Linkedlist 1.1概述 Linkedlist:底层是双向链表,因为不是连续存储,只是能找到下一个元素的地址,所以进行添加删除操作效率较高。但查询效率较低,因为只能从第一个挨个找。 1.2基本使用 public static void main(String[] ar…...
2024/4/30 17:52:52 - VSCode 离线安装中文语言包
1.插件市场 Extensions for Visual Studio family of products | Visual Studio Marketplace 输入: language 下载地址: https://ms-ceintl.gallery.vsassets.io/_apis/public/gallery/publisher/MS-CEINTL/extension/vscode-language-pac…...
2024/4/30 20:29:10 - 计算机机器视觉原理之分类器2
计算机视觉一.对于损失函数二.正则项与超参数三.优化算法参数优化梯度下降算法梯度计算:随机梯度下降算法小批量梯度下降算法四.数据集划分K折交叉验证五.数据预处理一.对于损失函数 损失函数: 单样本的多累支撑向量机损失: 线性分类器&am…...
2024/4/30 23:08:04 - 【Android春招每日一练】(六) 剑指4题+Java并发
文章目录概览剑指offer1.21 链表中倒数第k个节点1.22 反转链表1.23 合并两个排序链表1.24 树的子结构Java并发2.18 并发编程2.18 悲观锁与乐观锁2.19 AQS2.20 BlockingQueue2.21 ConcurrentHashMap总结概览 剑指offer:链表中倒数第k个节点、反转链表、合并两个排序…...
2024/4/14 13:11:26 - OSPF概述
...
2024/4/14 13:11:26 - C语言指针篇(初)
目录 一:什么是指针 指针 指针变量 &和*操作符 二:内存单元了解指针 什么是内存单元 指针权限的概念 三:指针的运算 指针和整数: 指针和指针: 四:二级指针和多级指针: 五&#…...
2024/4/14 13:11:36 - 大数据技术SpringBoot框架---实现前后端分离(MVC)对数据进行可视化
文章目录Spring Boot1、什么是Spring Boot2、Spring Boot 的特点3、SpringBoot项目结构4、Spring Boot 分层1、Dao 层2、Service 层3、Controller 层4、view 层5、Entity 层6、它们之间的关系7、总结配置开发环境创建 Spring Boot 项目使用 Maven 创建启动 Spring Boot加载数据…...
2024/4/18 23:45:43 - 预备役2022.1.19学习总结11
今天我看了一下KMP算法,神奇的是我知道它每个字在讲什么,但是写了一个题怎么都过不了。 讲讲我看到的 数据结构KMP算法配图详解(超详细)_哈顿之光的博客-CSDN博客_数据结构kmp算法详解 KMP算法的作用是在一个已知字符串中查找子…...
2024/4/7 5:09:17 - Cookie机制
Cookie机制 一、Cookie术语 Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session 跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机…...
2024/4/18 21:48:39 - React 路由组件选择与页面刷新问题分析
背景 总结最近 React 开发遇到的几个问题及解决过程。 state 跳转数据丢失问题 通过 state 传递数据的方式进行跳转时,如果 F5 刷新页面,会丢失参数导致页面异常。 解决办法之一可以用缓存: // 如果是刷新页面,则没有 state …...
2024/4/28 15:29:51 - 父组件向子组件传值,ref的实际应用
先在父组件中引入子组件页面: import ColorManager from ./ColorManager.vueexport default {components: {ColorManager}, } 子组件页面定义了beforeDel方法,现父组件传值到该方法中的参数中去 父组件页面通过ref的值进行传递,这里ref后面…...
2024/4/14 13:12:36 - 程序员面试除了八股文还需要什么?
互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯…) 所以,大家就迎来了一堆问题&…...
2024/4/19 9:34:23 - Spring事务失效的常见场景
前言 对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了。 在某些业务场景下,如果一个请求中,需要同时写入多张表的数据。为了保证操作的原子性(要么同时成功,要么同时失败),避免…...
2024/4/15 6:26:45 - Switch语句的运用及与If语句的比较
今天想给大家分享的是switch语句,因为我也不会,所以我先好好学习研究了一番。 其实switch语句很早老师就讲过了,只是我又忘记了,刚刚遇到一道题考察if语句和switch语句,正好把这部分知识复习一遍,也就将之…...
2024/4/14 13:12:31 - 美国上层阶级人物Ben Fisch,居然是玩弄职场的好手
耶鲁大学作为世界最顶尖的大学之一,拥有众多的知名校友,遍布政治、经济、艺术等各个领域,截止2016年,耶鲁大学的教授和校友共获得了57个诺贝尔奖,位居世界第九名,5个菲尔兹奖,位居世界第12名&am…...
2024/4/14 13:12:06
最新文章
- Java中优雅实现泛型类型的强制转换
在Java中经常遇到将对象强制转换成泛型类的情况: Map<String, Object> data Map.of("name", "XiaoMing","age", 17,"scores", List.of(80, 90, 70) );List<Integer> scores (List<Integer>) data.get…...
2024/5/1 4:08:01 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 随行付优化外卡收单,助力支付便利化
解决老年人和境外游客在支付过程中遇到的问题和障碍,正逐渐成为整个支付行业的焦点关注词汇。 在有关提高支付服务便利度的意见发布后,有关收单行业的好消息不断涌现:中国银联于3月15日宣布投入30亿元用于升级基础设施,促进支付便…...
2024/4/30 7:55:30 - 人工智能产业应用--具身智能
五、下一个浪潮 (一) 跳出缸中脑——虚实结合 在探索人工智能的边界时,“跳出缸中脑——虚实结合”这一概念提出了一个引人深思的视角,尤其是在具身智能的领域。具身智能是一种思想,强调智能体通过与其环境的直接物理互动来实现智能行为。然…...
2024/4/30 0:58:30 - 《C缺陷和陷阱》-笔记(5)
目录 一、整数溢出 溢出 如何防止溢出 二、为函数main提供返回值 连接 一、什么是连接器 连接器工作原理 三、声明与定义 四、命名冲突与static 修饰符 statia 一、整数溢出 溢出 C语言中存在两类整数算术运算,有符号运算与无符号运算。 在无…...
2024/4/28 18:22:42 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/29 23:16:47 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/30 18:14:14 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/30 18:21:48 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/30 9:43:22 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57