RLMRealmConfiguration

Objective-C

@interface RLMRealmConfiguration : NSObject <NSCopying>

Swift

@_nonSendable(_assumed) class RLMRealmConfiguration : NSObject, NSCopying

RLMRealmConfiguration实例描述了用于创建 Realm 实例的不同选项。

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

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

默认配置

  • 当没有显式指定其他配置时,返回用于创建 Realm 的默认配置(即 +[RLMRealm defaultRealm] )。

    声明

    Objective-C

    + (nonnull instancetype)defaultConfiguration;

    Swift

    class func `default`() -> Self

    返回值

    默认 Realm 配置。

  • 将默认配置设置为给定的RLMRealmConfiguration

    声明

    Objective-C

    + (void)setDefaultConfiguration:(nonnull RLMRealmConfiguration *)configuration;

    Swift

    class func setDefault(_ configuration: RLMRealmConfiguration)

    参数

    configuration

    新的默认 Realm 配置。

属性

  • Realm 文件的本地 URL。 与inMemoryIdentifier互斥;设置这两个属性中的一个会自动将另一个属性置零。

    声明

    Objective-C

    @property (nonatomic, copy, nullable) NSURL *fileURL;

    Swift

    var fileURL: URL? { get set }
  • 用于标识特定内存中 Realm 的字符串。 与fileURLseedFilePath互斥。 设置内存中标识符会自动将其他两个标识符清零。

    声明

    Objective-C

    @property (nonatomic, copy, nullable) NSString *inMemoryIdentifier;

    Swift

    var inMemoryIdentifier: String? { get set }
  • 用于加密数据的 64 字节密钥;如果未启用加密,则为nil

    声明

    Objective-C

    @property (nonatomic, copy, nullable) NSData *encryptionKey;

    Swift

    var encryptionKey: Data? { get set }
  • 是否以只读模式打开 Realm。

    对于非同步 Realm,这是打开不可写入或位于不可写入目录中的 Realm 文件所必需的。 这只应用于在打开时不会被任何人修改的文件,而不仅仅是获取可能被其他线程或进程写入的文件的只读视图。 以只读模式打开需要禁用 Realm 的读取器/写入器协调,因此从另一个进程提交写事务会导致崩溃。

    同步 Realm 必须始终可写(否则无法进行同步),而这只是禁止在 Realm 上执行写事务(write transaction)。此外,它还会跳过一些对 Realm 进行的自动写入,例如初始化 Realm 的模式。 对于同步用户没有写入权限的 Realm,设置readOnly = YES并不是严格要求的,但强烈建议这样做,因为它将改进错误报告并及早捕获一些错误。

    使用基于查询的同步的 Realm 无法以只读模式打开。

    声明

    Objective-C

    @property (nonatomic) BOOL readOnly;

    Swift

    var readOnly: Bool { get set }
  • 当前模式版本。

    声明

    Objective-C

    @property (nonatomic) uint64_t schemaVersion;

    Swift

    var schemaVersion: UInt64 { get set }
  • 将 Realm 迁移到当前版本的区块。

    声明

    Objective-C

    @property (nonatomic, copy, nullable) RLMMigrationBlock migrationBlock;

    Swift

    var migrationBlock: RLMMigrationBlock? { get set }
  • 如果需要迁移,是否使用提供的模式重新创建 Realm 文件。 当存储的模式与提供的模式不同,或者存储的模式版本与此配置上的版本不同时,就会出现这种情况。 如果需要或执行迁移,则将此属性设置为YES会删除该文件。

    注意

    将此属性设置为YES不会禁用文件格式迁移。

    声明

    Objective-C

    @property (nonatomic) BOOL deleteRealmIfMigrationNeeded;

    Swift

    var deleteRealmIfMigrationNeeded: Bool { get set }
  • 在进程生命周期中首次打开 Realm 时调用的区块,用于确定是否应在将其返回给用户之前对其进行压缩。 系统会向其传递总文件大小(数据 + 可用空间)以及文件中数据使用的总字节数。

    返回YES表示应尝试压缩文件。 如果另一个进程正在访问它,则将跳过压实。

    声明

    Objective-C

    @property (nonatomic, copy, nullable) RLMShouldCompactOnLaunchBlock shouldCompactOnLaunch;

    Swift

    var shouldCompactOnLaunch: RLMShouldCompactOnLaunchBlock? { get set }
  • Realm 托管的类。

    声明

    Objective-C

    @property (nonatomic, copy, nullable) NSArray *objectClasses;

    Swift

    var objectClasses: [Any]? { get set }
  • 尝试启动写事务(write transaction)时,在引发异常之前,Realm 文件中活动版本的最大数量。

    Realm 提供 MVCC 快照隔离,这意味着一个线程上的写入不会覆盖另一线程上正在读取的数据,而是写入该数据的新副本。当 Realm 刷新时,它会更新到最新版本的数据并释放旧版本,从而允许它们被后续写事务(write transaction)覆盖。

    在正常情况下,这不是问题,但如果活动版本的数量过多,则会对磁盘上的文件大小产生负面影响。 当同时在多个不同线程上执行写入时、长时间持有冻结对象时或在不允许 Realm 刷新的背景线程上执行长时间操作时,都可能会发生这种情况。

    将此属性设置为非零值,超过设定的版本数则会引发异常。 可以在开发期间使用较低的值,以帮助识别可能有问题的地方,或者在生产使用中导致应用程序崩溃,而不是生成太大而无法打开的 Realm 文件。

    声明

    Objective-C

    @property (nonatomic) NSUInteger maximumNumberOfActiveVersions;

    Swift

    var maximumNumberOfActiveVersions: UInt { get set }
  • 首次打开 Realm 时,不会创建空文件,而是从提供的种子文件路径复制并使用 Realm 文件。 这可用于打开预填充数据的 Realm 文件。

    如果配置的目标路径中已存在 Realm 文件,则不会复制种子文件,而是会打开已存在的 Realm。

    请注意,要将此参数与同步 Realm 配置一起使用,必须首先使用[RLMRealm writeCopyForConfiguration:]将种子 Realm 适当复制到目标。

    此选项与inMemoryIdentifier互斥。 设置seedFilePath会将inMemoryIdentifier

    声明

    Objective-C

    @property (nonatomic, copy, nullable) NSURL *seedFilePath;

    Swift

    var seedFilePath: URL? { get set }
  • 一个配置对象,表示要与 Atlas Device Sync 同步的 Realm 的配置状态。

    此属性与inMemoryIdentifierfileURL互斥;设置这三个属性中的任何一个都会自动将其他两个属性清零。

    声明

    Objective-C

    @property (nonatomic, nullable) RLMSyncConfiguration *syncConfiguration;

    Swift

    var syncConfiguration: RLMSyncConfiguration? { get set }