以下类在全球范围内可用。

  • RLMArray 是 Realm 中用于定义多个 container 关系的类型。

    NSArray不同, RLMArray包含由objectClassName属性指定的单一类型。 在这些Docs中,这称为数组的“类型”。

    声明RLMArray属性时,必须使用与其应包含的对象相同的名称将该类型标记为符合协议(请参阅RLM_COLLECTION_TYPE宏)。 此外,可以使用 Objective-C 泛型声明该属性,以提高编译时类型安全性。

    RLM_COLLECTION_TYPE(ObjectType)
    ...
    @property RLMArray<ObjectType *><ObjectType> *arrayOfObjectTypes;
    

    RLMArray可以使用与RLMObjectRLMResult相同的谓词进行查询。

    RLMArrays 不能直接创建。 RLMArray上的RLMObject 属性是在访问时延迟创建的,或者可以通过查询 Realm 来获取。

    键值观察

    RLMArray 支持对RLMObject子类上的RLMArray属性进行数组键值观察,并且当RLMArray附加到托管RLMObject时, RLMArray实例本身的invalidated属性符合键值观察( RLMArray非托管RLMObject上的 永远不会失效)。

    由于RLMArray附加到它们所属的对象,因此它们不需要使用来自-mutableArrayValueForKey:的可变collection代理对象或在包含的对象上使用与 KVC 兼容的变更方法。 相反,您可以直接在RLMArray上调用变更方法。

    查看更多

    声明

    Objective-C

    @interface RLMArray<RLMObjectType> : NSObject <RLMCollection>

    Swift

    @_nonSendable(_assumed) class RLMArray<RLMObjectType> : NSObject, RLMCollection where RLMObjectType : AnyObject
  • 一个任务对象,可用于观察或取消异步打开。

    当异步打开同步 Realm 时,会在调用完成回调之前从服务器下载 Realm 的最新状态。 此任务对象可用于观察下载状态或取消下载。 应该使用此选项,而不是尝试通过同步会话观察下载,因为同步会话本身是异步创建的,并且当 -[RLMKRealm asyncOpenWithConfiguration:completion:] 返回时可能还不存在。

    查看更多

    声明

    Objective-C

    
    @interface RLMAsyncOpenTask : NSObject

    Swift

    @_nonSendable(_assumed) class RLMAsyncOpenTask : NSObject, @unchecked Sendable
  • RLMSortDescriptor存储属性名称和排序顺序,以便与sortedResultsUsingDescriptors:一起使用。 它与NSSortDescriptor类似,但仅支持可由 Realm查询引擎高效运行的功能子集。

    RLMSortDescriptor 实例不可变。

    查看更多

    声明

    Objective-C

    
    @interface RLMSortDescriptor : NSObject

    Swift

    @_nonSendable(_assumed) class RLMSortDescriptor : NSObject, @unchecked Sendable
  • RLMCollectionChange对象封装有关Realm通知所报告的集合变更的信息。

    RLMCollectionChange 传递到在RLMArrayRLMResults上向-addNotificationBlock注册的通知块,并报告自上次调用通知区块以来集合中的哪些行发生了更改。

    更改信息有两种格式:集合中每种更改类型的行索引的简单数组,以及请求部分中适合直接传递给UITableView的批量更新方法的索引路径数组。 更新名为tvUITableView的完整示例:

    [tv beginUpdates];
    [tv deleteRowsAtIndexPaths:[changes deletionsInSection:0] withRowAnimation:UITableViewRowAnimationAutomatic];
    [tv insertRowsAtIndexPaths:[changes insertionsInSection:0] withRowAnimation:UITableViewRowAnimationAutomatic];
    [tv reloadRowsAtIndexPaths:[changes modificationsInSection:0] withRowAnimation:UITableViewRowAnimationAutomatic];
    [tv endUpdates];
    

    RLMCollectionChange中的所有数组始终按升序排序。

    查看更多

    声明

    Objective-C

    @interface RLMCollectionChange : NSObject

    Swift

    @_nonSendable(_assumed) class RLMCollectionChange : NSObject
  • 128 位 IEEE 754-2008 十进制浮点数。

    此类型类似于 Swift 的内置 Decimal 类型,但分配位的方式不同,从而导致可表示的范围不同。 (NS)Decimal 存储最多 38 位的有效数字和从 -128 到 127 的指数,而此类型可存储最多 34 位的有效数字和从 -6143 到 6144 的指数。

    查看更多

    声明

    Objective-C

    @interface RLMDecimal128 : NSObject <NSCopying>

    Swift

    @_nonSendable(_assumed) class RLMDecimal128 : NSObject, NSCopying, @unchecked Sendable
  • RLMDictionary 是Realm中的一种容器类型,表示键值对的动态集合。

    NSDictionary不同, RLMDictionary包含单个键和值类型。 在这些Docs中,这被称为字典的“type”和“keyType”。

    声明RLMDictionary属性时,必须使用与其应包含的对象相同的名称,将对象类型和 keyType 标记为符合协议。

    RLM_COLLECTION_TYPE(ObjectType)
    ...
    @property RLMDictionary<NSString *, ObjectType *><RLMString, ObjectType> *objectTypeDictionary;
    

    RLMDictionary可以使用与RLMObjectRLMResult相同的谓词进行查询。

    RLMDictionarys 不能直接创建。 RLMDictionary上的RLMObject 属性是在访问时延迟创建的,或者可以通过查询 Realm 来获取。

    RLMDictionary 仅支持NSString作为键。 Realm 不允许在字典键中使用.$字符。

    键值观察

    RLMDictionary 支持对RLMObject子类的RLMDictionary属性进行字典键值观察,并且当RLMDictionary附加到托管RLMObject时, RLMDictionary实例本身的invalidated属性符合键值观察( RLMDictionary非托管RLMObject上的 永远不会失效)。

    查看更多

    声明

    Objective-C

    @interface RLMDictionary<RLMKeyType, RLMObjectType> : NSObject <RLMCollection>

    Swift

    @_nonSendable(_assumed) class RLMDictionary<RLMKeyType, RLMObjectType> : NSObject, RLMCollection where RLMKeyType : AnyObject, RLMObjectType : AnyObject
  • RLMDictionaryChange对象封装有关 Realm 通知所报告的字典变更的信息。

    RLMDictionaryChange 传递到在RLMDictionary上向-addNotificationBlock注册的通知块,并报告自上次调用通知块以来字典中的哪些键发生了更改。

    查看更多

    声明

    Objective-C

    @interface RLMDictionaryChange : NSObject

    Swift

    @_nonSendable(_assumed) class RLMDictionaryChange : NSObject
  • RLMEmbeddedObject 是用于定义 Realm 模型对象的基类。

    嵌入式对象的工作方式与普通对象类似,但由单个父对象(其本身可能是嵌入式对象)拥有。 与普通的顶级对象不同,嵌入式对象不能直接在 Realm 中创建或添加到 Realm 中。 相反,它们只能作为父对象的一部分创建,或者通过将非托管对象分配给父对象的属性来创建。 通过重新分配 RLMObject 属性或从包含嵌入式对象的数组中删除嵌入式对象,删除对象或将对象修改为不再指向嵌入式对象时,嵌入式对象会自动删除。

    嵌入式对象只能有一个链接到它们的父对象,尝试链接到现有的托管嵌入式对象会引发异常。

    RLMEmbeddedObject支持的属性类型与RLMObject相同,不同之处在于嵌入式对象无法链接到顶级对象,因此不支持RLMObjectRLMArray<RLMObject>属性( RLMEmbeddedObjectRLMArray<RLMEmbeddedObject>)。

    嵌入式对象不能具有主键或索引属性。

    查看更多

    声明

    Objective-C

    @interface RLMEmbeddedObject : RLMObjectBase <RLMThreadConfined>

    Swift

    @_nonSendable(_assumed) class RLMEmbeddedObject : RLMObjectBase, RLMThreadConfined
  • 表示由纬度和经度值形成的点的坐标的类。

    • 纬度范围介于 -90 到 90 度(含)之间。
    • 经度范围介于 -180 到 180 度(含)之间。
    • 高度不能为负值。

    尝试创建RLMGeospatialPoint时,超出此范围的值将返回 nil。

    注意

    没有专门的类型来存储地理空间点,而是应将点存储为GeoJson 形状的嵌入式对象,如下所述。 地理空间查询 ( geoWithin ) 只能在此类对象中执行,否则会抛出异常。

    Realm 中的持久化地理点目前是使用鸭子类型来完成的,这意味着可以查询具有特定形状的任何模型类,就好像它包含地理位置一样。 推荐的方法是使用嵌入式对象。

    警告

    此结构无法持久保存,只能用于构建其他地理空间形状,例如( RLMGeospatialBoxRLMGeospatialPolygonRLMGeospatialCircle )。

    警告

    任何查询计算中均不使用海拔高度。

    查看更多

    声明

    Objective-C

    @interface RLMGeospatialPoint : NSObject

    Swift

    class RLMGeospatialPoint : NSObject, @unchecked Sendable
  • 表示矩形的类,可用于地理空间geoWithin查询。

    警告

    此类无法持久保存,只能在地理空间geoWithin查询中使用。
    查看更多

    声明

    Objective-C

    @interface RLMGeospatialBox : NSObject <RLMGeospatial>

    Swift

    class RLMGeospatialBox : NSObject, RLMGeospatial, @unchecked Sendable
  • 表示多边形的类,可用于地理空间geoWithin查询。

    RLMGeospatialPolygon描述了一种由外部Polygon (称为outerRing )和 0 个或多个内部Polygon (称为holes )一致的形状,它表示外部Polygon内有无限数量的内孔。 Polygon描述由至少三个线段组成的形状,其中最后一个和第一个RLMGeospatialPoint必须相同才能表示闭合多边形(这意味着至少需要 4 个点才能定义多边形)。 RLMGeospatialPolygon中的内孔必须完全位于外环内部

    hole具有以下限制:

    • 孔不得交叉,即一个孔的边界不得与任何其他孔的内部和外部相交。
    • 孔不得共享边,即,如果一个孔包含边 AB,则其他孔不得包含该边。
    • 孔可以共享顶点,但任何顶点不得在单个孔中出现两次。
    • 没有一个洞是空的。
    • 只允许嵌套一次。

    警告

    此类无法持久保存,只能在地理空间geoWithin查询中使用。

    查看更多

    声明

    Objective-C

    @interface RLMGeospatialPolygon : NSObject <RLMGeospatial>

    Swift

    class RLMGeospatialPolygon : NSObject, RLMGeospatial, @unchecked Sendable
  • 此结构是表示/转换距离的辅助函数。 它可用于地理空间查询,例如由 RLMGeospatialCircle

    警告

    此结构无法持久保存,只能用于构建其他地理空间形状
    查看更多

    声明

    Objective-C

    @interface RLMDistance : NSObject

    Swift

    class RLMDistance : NSObject, @unchecked Sendable
  • 表示圆形的类,可用于地理空间geoWithin查询。

    警告

    此类无法持久保存,只能在地理空间geoWithin查询中使用。
    查看更多

    声明

    Objective-C

    @interface RLMGeospatialCircle : NSObject <RLMGeospatial>

    Swift

    class RLMGeospatialCircle : NSObject, RLMGeospatial, @unchecked Sendable
  • RLMLogger 用于创建您自己的自定义日志记录逻辑。

    您可以通过创建RLMLogger实例来定义自己的记录器,并定义在出现日志消息时调用的日志函数。 使用setDefaultLogger将此自定义记录器设置为默认记录器。

    RLMLogger.defaultLogger = [[RLMLogger alloc] initWithLevel:RLMLogLevelDebug
                                               logFunction:^(RLMLogLevel level, NSString * message) {
        NSLog(@"Realm Log - %lu, %@", (unsigned long)level, message);
    }];
    

    注意

    默认情况下,日志阈值级别为RLMLogLevelInfo ,日志字符串输出到 Apple System Logger。
    查看更多

    声明

    Objective-C

    @interface RLMLogger : NSObject

    Swift

    class RLMLogger : NSObject
  • RLMMigration 实例封装了旨在促进模式迁移的信息。

    更新 Realm 的版本时, RLMMigration实例会传递到用户定义的RLMMigrationBlock区块中。 此实例提供对新旧数据库模式、Realm 中的对象的访问,并提供在迁移期间修改 Realm 的功能。

    查看更多

    声明

    Objective-C

    @interface RLMMigration : NSObject

    Swift

    @_nonSendable(_assumed) class RLMMigration : NSObject
  • RLMObject 是表示存储在 Realm 中的数据的模型对象的基类。

    通过子类化RLMObject并添加要托管的属性来定义模型类。 然后实例化并使用自定义子类,而不是直接使用RLMObject类。

    // Dog.h
    @interface Dog : RLMObject
    @property NSString *name;
    @property BOOL      adopted;
    @end
    
    // Dog.m
    @implementation Dog
    @end //none needed
    

    支持的属性类型

    • NSString
    • NSIntegerintlongfloatdouble
    • BOOL or bool
    • NSDate
    • NSData
    • NSNumber<X>,其中XRLMIntRLMFloatRLMDoubleRLMBool之一,适用于可选数字属性
    • RLMObject 子类,以对多对一关系进行建模。
    • RLMArray<X>,其中XRLMObject子类,用于对多对多关系进行建模。

    查询

    您可以直接通过以下类方法启动查询: allObjectsobjectsWhere:objectsWithPredicate: 。 这些方法可让您轻松地在自定义子类中查询默认 Realm 中该类的实例。

    要在默认 Realm 以外的 Realm 中进行搜索,请使用allObjectsInRealm:objectsInRealm:where:objectsInRealm:withPredicate:类方法。

    RLMRealm

    关系

    有关更多详细信息,请参阅我们的Realm Swift 文档

    键值观察

    所有RLMObject属性(包括在子类中创建的属性)都符合键值观察,但realmobjectSchema除外。

    观察 Realm 对象时,请记住以下提示:

    1. NSMutableArray属性不同, RLMArray属性不需要使用从-mutableArrayValueForKey:返回的代理对象,也不需要在包含的类上定义 KVC 更改方法。 您只需直接调用RLMArray上的方法即可;包含对象将自动观察到任何更改。
    2. 非托管RLMObject实例在具有任何观察到的属性时无法添加到 Realm。
    3. 不建议在-observeValueForKeyPath:ofObject:change:context:中修改托管RLMObject 。 即使 Realm 未处于写事务(write transaction)中(例如,在不同线程上进行更改后调用-[RLMRealm refresh]时)以及在应用更改之前发送的通知(使用NSKeyValueObservingOptionPrior时),属性也可能会发生变化可能会在您无法开始写事务(write transaction)时发送。
    查看更多

    声明

    Objective-C

    @interface RLMObject : RLMObjectBase <RLMThreadConfined>

    Swift

    @_nonSendable(_assumed) class RLMObject : RLMObjectBase, RLMThreadConfined
  • 有关RLMObject更改通知中更改的特定属性的信息。

    查看更多

    声明

    Objective-C

    @interface RLMPropertyChange : NSObject

    Swift

    @_nonSendable(_assumed) class RLMPropertyChange : NSObject
  • 一个(可能)12 字节的唯一ObjectId。

    ObjectId 类似于 GUID 或 UUID,可用于唯一标识对象,而无需集中式 ID 生成器。 ObjectID 由以下部分组成:

    1. 一个 4 字节时间戳,用于测量自 Unix 纪元以来 ObjectId 的创建时间(以秒为单位)。
    2. 5 字节随机值
    3. 一个 3 字节计数器,初始化为随机值。

    ObjectId 旨在快速生成。 按 ObjectId 字段排序通常会导致对象按创建顺序排序。

    查看更多

    声明

    Objective-C

    @interface RLMObjectId : NSObject <NSCopying>

    Swift

    @_nonSendable(_assumed) class RLMObjectId : NSObject, NSCopying, @unchecked Sendable
  • 该类表示 Realm 模型对象模式。

    使用 Realm 时, RLMObjectSchema实例允许执行迁移和内省数据库模式。

    对象模式映射到核心数据库中的表。

    查看更多

    声明

    Objective-C

    
    @interface RLMObjectSchema : NSObject <NSCopying>

    Swift

    @_nonSendable(_assumed) class RLMObjectSchema : NSObject, NSCopying, @unchecked Sendable
  • RLMProperty 实例表示由对象模式上下文中的 Realm 托管的属性。此类属性可能会持久保存在 Realm 文件中,也可能会根据 Realm 中的其他数据进行计算。

    使用 Realm 时, RLMProperty实例允许执行迁移和内省数据库模式。

    这些属性实例映射到核心数据库中的列。

    查看更多

    声明

    Objective-C

    
    @interface RLMProperty : NSObject

    Swift

    @_nonSendable(_assumed) class RLMProperty : NSObject, @unchecked Sendable
  • RLMPropertyDescriptor实例表示给定类的特定属性。

    查看更多

    声明

    Objective-C

    
    @interface RLMPropertyDescriptor : NSObject

    Swift

    @_nonSendable(_assumed) class RLMPropertyDescriptor : NSObject, @unchecked Sendable
  • 一个RLMRealm实例(也称为“Realm”)代表一个 Realm 数据库。

    Realm 可以存储在磁盘上(请参阅+[RLMRealm realmWithURL:] )或内存中(请参阅RLMRealmConfiguration )。

    RLMRealm 实例在内部缓存,并且在事件循环的单次迭代内的单个线程上多次构造等效的RLMRealm对象(例如,通过使用相同的路径或标识符)通常会返回相同的RLMRealm对象。

    如果您特别想要确保销毁一个RLMRealm实例(例如,如果您想打开一个 Realm,检查某些属性,然后可能删除该 Realm 文件并重新打开它),请将使用 Realm 文件的代码放在@autoreleasepool {}内,并确保没有其他强引用对其进行强引用。

    警告

    未冻结的RLMRealm实例受线程限制,不能跨线程或调度队列共享。 尝试这样做会导致抛出异常。 您必须在要与 Realm 交互的每个线程上调用此方法。 对于调度队列,这意味着您必须在每个调度的区块中调用它,因为不能保证队列在同一线程上运行其所有区块。
    查看更多

    声明

    Objective-C

    @interface RLMRealm : NSObject

    Swift

    @_nonSendable(_assumed) class RLMRealm : NSObject
  • 订阅Realm变更的方法返回的令牌。

    Realm 中的变更订阅会返回一个RLMNotificationToken实例,可用于取消订阅变更。 只要想继续接收通知,就必须存储对该令牌的强引用。 如果您希望停止,请调用-invalidate方法。 如果令牌被释放,通知也会停止。

    查看更多

    声明

    Objective-C

    @interface RLMNotificationToken : NSObject

    Swift

    @_nonSendable(_assumed) class RLMNotificationToken : NSObject, @unchecked Sendable
  • RLMRealmConfiguration实例描述了用于创建 Realm 实例的不同选项。

    RLMRealmConfiguration 实例只是普通的NSObject 。 与RLMRealmRLMObject不同,只要不改变它们,它们就可以在线程之间自由共享。

    为类子集创建配置对象(通过设置objectClasses属性)的成本可能很高。 因此,您通常希望为每个不同的配置缓存和重用单个配置对象,而不是在每次打开 Realm 时都创建一个新对象。

    查看更多

    声明

    Objective-C

    @interface RLMRealmConfiguration : NSObject <NSCopying>

    Swift

    @_nonSendable(_assumed) class RLMRealmConfiguration : NSObject, NSCopying
  • RLMResults 是 Realm 中从对象查询返回的自动更新container类型。它以collection的形式表示查询的结果。

    RLMResults 可以使用与RLMObjectRLMArray相同的谓词进行查询,并且可以链式查询以进一步筛选结果。

    RLMResults 始终反映当前线程上的 Realm 的当前状态,包括在当前线程上的写事务(write transaction)期间。唯一的例外是使用for...in快速枚举时,该枚举将始终枚举开始枚举时与查询匹配的对象,即使其中一些对象在枚举期间被删除或修改为被筛选器排除。

    RLMResults 首次访问时延迟求值;它们仅在请求查询结果时才运行查询。 这意味着链接多个临时RLMResults来对数据进行排序和筛选不会执行任何处理中间状态的额外工作。

    评估结果或添加通知块后,系统会立即使结果保持最新,并尽可能在背景线程上完成保持最新的工作。

    RLMResults 不能直接实例化。

    查看更多

    声明

    Objective-C

    @interface RLMResults<RLMObjectType>
        : NSObject <RLMCollection, NSFastEnumeration>

    Swift

    @_nonSendable(_assumed) class RLMResults<RLMObjectType> : NSObject, RLMCollection, NSFastEnumeration where RLMObjectType : AnyObject
  • RLMLinkingObjects 是一种自动更新的容器类型。 它表示链接到其父对象的对象集合。

    有关更多信息,请参阅文档中的“反向关系”部分。

    声明

    Objective-C

    @interface RLMLinkingObjects<RLMObjectType : RLMObject *> : RLMResults

    Swift

    @_nonSendable(_assumed) class RLMLinkingObjects<RLMObjectType> : RLMResults<AnyObject> where RLMObjectType : RLMObject
  • RLMSchema 实例表示由 Realm 托管的对象模式的collection。

    使用 Realm 时, RLMSchema实例允许执行迁移和内省数据库模式。

    模式映射到核心数据库中的collection。

    查看更多

    声明

    Objective-C

    @interface RLMSchema : NSObject <NSCopying>

    Swift

    @_nonSendable(_assumed) class RLMSchema : NSObject, NSCopying, @unchecked Sendable
  • RLMSectionedResultsChange对象封装有关 Realm 通知报告的分段结果变更的信息。

    RLMSectionedResultsChange 传递到在RLMSectionedResults上向-addNotificationBlock注册的通知块,并报告自上次调用通知块以来集合中的哪些部分和行发生了更改。

    更新名为tvUITableView的完整示例:

    [tv beginUpdates];
    [tv deleteRowsAtIndexPaths:changes.deletions withRowAnimation:UITableViewRowAnimationAutomatic];
    [tv insertRowsAtIndexPaths:changes.insertions withRowAnimation:UITableViewRowAnimationAutomatic];
    [tv reloadRowsAtIndexPaths:changes.modifications withRowAnimation:UITableViewRowAnimationAutomatic];
    [tv insertSections:changes.sectionsToInsert withRowAnimation:UITableViewRowAnimationAutomatic];
    [tv deleteSections:changes.sectionsToRemove withRowAnimation:UITableViewRowAnimationAutomatic];
    [tv endUpdates];
    

    RLMSectionedResultsChange中的所有数组始终按升序排序。

    查看更多

    声明

    Objective-C

    @interface RLMSectionedResultsChange : NSObject

    Swift

    @_nonSendable(_assumed) class RLMSectionedResultsChange : NSObject
  • RLMSection 包含属于指定节键的对象。

    查看更多

    声明

    Objective-C

    @interface RLMSection<RLMKeyType : id <RLMValue>, RLMObjectType>
        : NSObject <RLMSectionedResult>

    Swift

    @_nonSendable(_assumed) class RLMSection<RLMKeyType, RLMObjectType> : NSObject, RLMSectionedResult where RLMKeyType : RLMValue, RLMObjectType : AnyObject
  • 一种延迟评估的集合,其中包含由部分键确定的部分中的元素。

    查看更多

    声明

    Objective-C

    @interface RLMSectionedResults<RLMKeyType : id <RLMValue>,
                                   RLMObjectType : id <RLMValue>>
        : NSObject <RLMSectionedResult>

    Swift

    @_nonSendable(_assumed) class RLMSectionedResults<RLMKeyType, RLMObjectType> : NSObject, RLMSectionedResult where RLMKeyType : RLMValue, RLMObjectType : RLMValue
  • 用于存储不同对象的collection数据类型。

    注意

    RLMSet 支持存储基元和RLMObject类型。 RLMSet不支持存储嵌入式 Realm 对象。
    查看更多

    声明

    Objective-C

    @interface RLMSet<RLMObjectType> : NSObject <RLMCollection>

    Swift

    @_nonSendable(_assumed) class RLMSet<RLMObjectType> : NSObject, RLMCollection where RLMObjectType : AnyObject
  • 要在线程之间传递的对象,其中包含对其线程限制对象的线程安全引用。

    要在不同线程上解析目标 Realm 的线程安全引用,请传递给-[RLMRealm resolveThreadSafeReference:]

    警告

    RLMThreadSafeReference对象最多必须解析一次。 无法解析RLMThreadSafeReference将导致 Realm 的源版本被固定,直到引用被解除分配。

    注意

    首选短期RLMThreadSafeReference ,因为源 Realm 版本的数据将保留,直到所有引用都已解析或解除分配。

    查看更多

    声明

    Objective-C

    
    @interface RLMThreadSafeReference<__covariant Confined : id <RLMThreadConfined>>
        : NSObject

    Swift

    @_nonSendable(_assumed) class RLMThreadSafeReference<Confined> : NSObject, @unchecked Sendable where Confined : RLMThreadConfined