项目中,有时需要通过特定的字符寻找特定的类,如mybatis,可以通过适配符寻找要扫描的目录。...我们自己也可以通过适配符寻找到自己想要的类,具体代码如下: /** * 通过包名获取class * * @author starmaark * @version 2018年4月12日 下午5:55...>> findPathMatchingResources(String locationPattern) { // 第一个class类的集合 Set<Class<?...className)); } } }catch (Exception e){ log.error("寻找符合条件的包失败
要将Java类定义为不可变,我们必须将所有属性定义为readonly和private。 只有构造函数可以设置属性的值。 Groovy文档 具有适用于不可变对象的规则的完整列表。...使类不可变的Java代码很冗长,特别是因为需要重写hashCode(),equals()和toString()方法。 Groovy有@ Immutable转换为我们完成所有工作。...我们只需要在类定义中定义@Imputable,我们为这个类创建的任何对象都是一个不可变对象。 Groovy按照不可变对象的规则生成一个类文件。
看django源码时,看到了这样的一个用法,不知道是什么意思,于是查了下,发现这么个用法,直接把实例化后的类当函数来使,果然是强悍的函数式编程。...#把类当函数使 在Django中的template的loader.py中,就是使用了这个方法,部分代码: class BaseLoader(object): is_usable = False
后来发现我的数组中的对象,是Model类的对象。 既然涉及到了Model类的对象,就要考虑用归档(NSKeyedArchiver)来处理它了。...要使对象可以归档,对象必须实现NSCoding协议,大部分对象都符合NSCoding的协议,一般我们可以在我们的Model类中实现NSCoding协议。...遵循NSCoding协议,我们需要实现两个方法。...copyWithZone:zone]; copy.version = [self.version copyWithZone:zone]; return copy; } 特别注意 如果需要归档的类是某个自定义类的子类时...,就需要在归档和解档之前先实现父类的归档和解档方法。
我们的方法依赖于奖励建模的递归应用,以符合用户意图的方式解决复杂的现实问题。...该分数为强化学习智能体提供了有用的奖励信号,并使我们能够快速反馈哪些算法和架构选择最有效。 智能体对齐问题 最终,AI的目标是让我们能够应对现实世界中日益复杂的挑战,使人类受益。...我们需要一种很好的方式来提供反馈并使人工智能体能够可靠地理解我们想要的东西,以帮助我们实现它。换句话说,我们希望以人类反馈的方式训练AI系统,使系统的行为与我们的意图保持一致。...出于我们的目的,我们定义智能体对齐问题如下: 我们如何创建符合用户意图的智能体?
因此,被归档的数据类型都必须遵守一个相同的协议,才能在这个协议的约束下进行正确的归档与解归档,这个协议就是NSCoding协议,我们可以先来看一下NSCoding中的内容: @protocol NSCoding...(3)进行自定义对象的归档 上面介绍中有提到,原则上,任何遵守了NSCoding协议的类都可以进行归档操作,那么对于我们自定义的对象,我们该如何来做呢?...但是也带来了一个缺陷,每个类都需要实现NSCoding中的两个方法是十分繁琐的,并且类越复杂,这个步骤越繁琐,如果在之后的修改和优化中类做了改变,相应的方法也要做改变,这将增加很大的工作量并且埋下潜在bug...所以我们会想,能否设计一个这样的model基类,来使需要存储的model都继承于它,使我们的model不需要实现NSCoding方法的同时可以支持归档呢,通过runtime和OC语言特性的一些小技巧,我们是可以做到的...2、基类模型的设计 我们新建一个BaseModel类,核心方法如下: //归档与解归档的方法 - (instancetype)initWithCoder:(NSCoder *)coder
Object类的作用:m a r k - t o- w i n: 在java中,因为所有的类都有共性,所以java的缔造者们把java设计成这样:所有的类都是Object类的直接或间接子类...,而且把上述所有类的共 性都放在Object类中。...Object类的equals和toString的用法: 下面一组两个例子,马克-to-win:第一个例子是用的父类Object的equals和toString方法,Object的equals是比较对象...println (c1);会导致c1的toString被调用(这是语法),第一个例子中c1因为没有toString方法, 所以就用基类Object的toString方法。
NSCoding协议与对象序列化和反序列化 在开发中可能需要将自定义对象持久化存储在本地的文件中,或将对象转换为NSData类的数据并通过网络发送,要实现这些操作的前提就是自定义对象需要遵守NSCoding...协议,NSCoding协议是对象序列化和反序列化的基础,NSCoding协议只定义了两个方法: /*将对象编码 序列化对象时调用该方法,在该方法中序列化对象的每一个属性 一般使用encodeObject...协议,因此调用父类的init构造方法 如果继承的父类遵守NSCoding协议需要调用父类的initWithCoder:方法 [super initWithCoder:aDecoder...遵守NSCoding协议并实现了相关序列化和反序列化方法。...关于NSCoding协议的使用是比较简单的,需要注意的就是在initWithCoder:方法中调用父类构造函数的方式。 备注 由于作者水平有限,难免出现纰漏,如有问题还请不吝赐教。
协议是任何类都能够选择实现的程序接口。协议能够使两个没有继承关系的类相互交流并完成特定的目的,因此它提供了除继承外的另一种选择。任何能够为其他类提供有用行为的类都能够声明接口来匿名的传达这个行为。...因为这个协议中定义了一些基本的方法,由于我们使用的所有类都继承NSObject这个基类,而这个基类遵守了这个协议,那么也就实现了其中的那些方法,这些方法当然可以由NSObject及其子类对象调用...因为上文提到过,protocol不能定义成员变量,但是能够声明属性,因为属性=成员变量+setting方法+getting方法 @protocol NSCoding - (void...@protocol NSSecureCoding NSCoding> @required // This property must return YES on all classes that allow...大部分支持NSCoding的系统对象都已经升级到支持NSSecureCoding; 常用于对象编解码; 致谢 感谢雨雪传奇的作品 感谢黄龙辉的作品
NSCoding> 当类中包含其他类似, 其他类也实现NSCoding就行 #pragma mark - 解档 - (id)initWithCoder:(NSCoder *)decoder {...strName]; // 进行归档赋值 [encoder encodeObject:value forKey:strName]; } free(ivar); } NSCoder 是一个抽象类,...抽象类不能被实例话,只能提供一些想让子类继承的方法。...holderModel = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; NSUserDefault存Model // Model 实现`NSCoding..., 其他类也实现NSCoping就行 - (id)copyWithZone:(NSZone *)zone { HolderBean *holder = [[[self class] allocWithZone
NSFileManager 系统提供了NSFileManager类给开发去读取沙盒目录中的文件。...NSBundle就是系统提供,用来读取这些资源的类。..."test_name_key"]; NSLog(@"id:%d, name:%@", value_id, value_name); } }]; FMDatabaseQueue是使所有操作都在同一个队列进行...有的开发者会使用系统提供的NSCoding协议手动添加字段,有的开发者会使用Runtime自动实现NSCoding,有的开发者会使用成熟的第三方库(例如YYModel),下面分别介绍这几种序列化的方式。...NSCoding是系统提供的序列化协议,在对象转换为二进制的时候,会通过NSCoding的方法回调开发者。
我们可以通过 - performSelector: 等方式 对 Category 中的相应方法进行调用 a) 将 Category 和它的主类(或元类)注册到哈希表中; - b)如果主类(或元类)已实现...在这里分了两种情况进行处理:Category 中的实例方法和属性被整合到主类中;而类方法则被整合到元类中(关于对象、类和元类的更多细节,可以参考我前面的博文《Objective-C对象模型》)。...- 分类中的对象方法依然是存储在类对象中的,同本类对象方法在同一个地方,调用步骤也同调用对象方法一样。如果是类方法的话,也同样是存储在元类对象中。 分类方法是如何存储在类对象中的?...__attribute__ ((used)) = { 0, "NSCoding", 0, (const struct method_list_t *)&_OBJC_PROTOCOL_INSTANCE_METHODS_NSCoding...}; struct _protocol_t *_OBJC_LABEL_PROTOCOL_$_NSCoding = &_OBJC_PROTOCOL_NSCoding; static struct
属性列表(plist)归档 (2)Preference(偏好设置),本质还是通过“plist”来存储数据, 但是使用更简单(无需关注文件、文件夹路径和名称) (3)NSKeyedArchiver归档(NSCoding...路径获取: 通过NSUserDefaults类存取该目录下的设置信息 ---- 三、使用方法 1、属性列表 属性列表是一种XML格式的文件,拓展名为plist,如果对象是NSString、NSDictionary...协议的对象才可以进行归档解档,默NSString、NSDictionary、NSArray、NSData、NSNumber等类型已遵守NSCoding协议,可以直接归档解档。...(1)遵守NSCoding协议,实现协议方法 NSCoding协议中两个方法,一般写在模型中: 归档调用 一般在这个方法里面指定如何归档对象中的每个实例变量,可以使用encodeObject:forKey...toFile:path]; (3)解档一个对象 Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; 注意: (1)如果父类也遵守了
_YYLinkedMap:YYMemoryCache使用的双向链表类。 _YYLinkedMapNode:是_YYLinkedMap使用的节点类。...YYKVStorage:YYDiskCache的底层实现类,用于管理磁盘缓存。 YYKVStorageItem:内置在YYKVStorage中,是YYKVStorage内部用于封装某个缓存的类。...下面结合代码来讲解一下这个算法的实现: YYMemoryCache用一个链表节点类来保存某个单独的内存缓存的信息(键,值,缓存时间等),然后用一个双向链表类来保存和管理这些节点。...这两个类的名称分别是: _YYLinkedMapNode:链表内的节点类,可以看做是对某个单独内存缓存的封装。...//将node插入至链表头部 [_lru insertNodeAtHead:node]; } //如果cost超过了限制,则进行删除缓存操作(从链表尾部开始删除,直到符合限制要求
Mantle能做什么 Mantle可以轻松把JSON数据、字典(Dictionary)和模型(即Objective对象)之间的相互转换,支持自定义映射,并且内置实现了NSCoding和NSCoping,...使用MTLModel 如果使用MTLModel,我们可以这样,声明一个类继承自MTLModel typedef enum : NSUInteger { GHIssueStateOpen...classForParsingJSONDictionary 如果你使用了类簇,classForParsingJSONDictionary可以让你选择使用哪一个类进行JSON反序列化。...MTLModel可以用归档很好的存储模型而不需要去实现令人厌烦的NSCoding协议。...持久化 Mantle配合归档 MTLModel默认实现了 NSCoding协议,可以利用NSKeyedArchiver方便的对对象进行归档和解档。
DI确保通过调用超类的DI来初始化继承的实例变量,通常具有最多的参数并完成大部分初始化工作,而其他SI通过[self init..]调用 DI对一个类起着重要的作用,它确保通过调用超类的指定初始化方法来初始化继承的实例变量...DI, 对于父类亦然,直到根类 (不可调用自己其他的DI) 如果父类没有实现相应的方法,则需要根据实际情况来决定是给父类补充一个新的方法还是调用父类其他数据源的DI。...如:NSCoding协议提供了“序列化机制”(serialization mechanism), 对象可依次指明其自身的 编码encode 及 解码decode 方式。...下面上代码: @interface Rectangle : NSObject NSCoding> // 属性声明为只读,外界就无法设置Rectangle对象的属性了,只能通过初始化方法设置 @property...NSCoding协议(fully NSCoding compliant) return self; } @end @interface Square : Rectangle @property (nonatomic
一般对于一些基本的用户设置,因为数据量很小,我们可以使用OC语言中的NSUserDefaults类来进行处理。使用方法很简单,只需要调用类中的方法即可。...归档在iOS中是另一种形式的序列化,只要遵循了NSCoding协议的对象都可以通过它实现序列化。...由于决大多数支持存储数据的Foundation和Cocoa Touch类都遵循了NSCoding协议,因此,对于大多数类来说,归档相对而言还是比较容易实现的。 1....遵循NSCoding协议 NSCoding协议声明了两个方法,这两个方法都是必须实现的。一个用来说明如何将对象编码到归档中,另一个说明如何进行解档来获取一个新对象。...注意 必须遵循并实现NSCoding协议 保存文件的扩展名可以任意指定 继承时必须先调用父类的归档解档方法 扩展:iOS开发基础-数据存储方式(归档) 2.4 手动存放沙盒 手动将数据存放到沙盒
Objective-C 从三种不同的层级上与 Runtime 系统进行交互,分别是通过 Objective-C 源代码,通过 Foundation 框架的NSObject类定义的方法,通过对 runtime...2、作用 1.动态交换两个方法的实现 2.为类别添加属性(我们知道类别是不能扩展属性的,只能扩展方法,但可以运行时实现,通过为类增加属性) 3.获取某个类的所有成员变量和成员方法 4.实现NSCoding...(@property申明的属性),而class_copyIvarList返回类的所有属性和变量(包括在@interface大括号中声明的变量) 四、实现NSCoding的自动归档和自动解档; (不用对每个属性...,然后对父类进行编码,如果父类是NSObject就结束编码 - (void)encode:(NSCoder *)aCoder { // 一层层父类往上查找,对父类的属性执行归解档方法 Class...if (self = [super init]) { [self decode:aDecoder]; } return self; } 当然还可以更加简洁,把NSCoding
obj-c中有一类对象:NSArray,NSDictionary,NSString,NSNumber,NSDate,NSData以及它们的可变版本(指NSMutableArray,NSMutableDictionary......这一类) ,都可以方便的将自身的数据以某种格式(比如xml格式)序列化后保存成本地文件。...如果你用来存放数据的类是自己定义的,并不是上面这些预置的对象,那么就要借助正式协议NSCoding来实现序列化和反序列化。...比如,我们有一个自己的类Sample.h #import @interface Sample : NSObjectNSCoding> { NSString...magicNumber,shoeSize,subThingies]; return (description); } @end 注意其中的:encodeWithCoder与initWithCoder,这是NSCoding
不直接操作缓存,也是间接地通过另一个类(YYKVStorage)来操作缓存。 它使用LRU算法来清理缓存。 支持按 cost,count 和 age 这三个维度来清理不符合标准的缓存。...和YYMemoryCache里面的_YYLinkedMap将缓存封装成节点类_YYLinkedMapNode类似,YYKVStorage也将某个单独的磁盘缓存封装成了一个类,这个类就是YYKVStorageItem...在详细讲解写入缓存的代码之前,我先讲一下写入缓存的大致逻辑,有助于让大家理解整个YYDiskCache写入缓存的流程: 首先判断传入的key和value是否符合要求,如果不符合要求,则立即返回NO,缓存失败...dispatch_semaphore是GCD用来同步的一种方式,与他相关的共有三个函数,分别是 dispatch_semaphore_create:定义信号量 dispatch_semaphore_signal:使信号量...+1 dispatch_semaphore_wait:使信号量-1 当信号量为0时,就会做等待处理,这是其他线程如果访问的话就会让其等待。