配置
Configuration
实例描述了用于创建 Realm 实例的不同选项。
Configuration
实例只是普通的 Swift 结构体。 与Realm
和Object
不同,只要不改变它们,就可以在线程之间自由共享。
为类子集创建配置值(通过设置objectClasses
属性)的成本可能很高。 因此,您通常希望为每个不同的配置缓存并重复使用单个配置值,而不是在每次打开 Realm 时都创建一个新值。
-
未显式指定配置时用于创建 Realm 的默认
Configuration
(即Realm()
)声明
Swift
public static var defaultConfiguration: Configuration { get set }
-
init(fileURL:
inMemoryIdentifier: syncConfiguration: encryptionKey: readOnly: schemaVersion: migrationBlock: deleteRealmIfMigrationNeeded: shouldCompactOnLaunch: objectTypes: ) 创建一个可用于创建新的
Realm
实例的Configuration
。注意
fileURL
、inMemoryIdentifier
和syncConfiguration
参数是互斥的。 仅设立其中之一,如果您希望使用默认文件URL,则不设置。声明
Swift
public init(fileURL: URL? = URL(fileURLWithPath: RLMRealmPathForFile("default.realm"), isDirectory: false), inMemoryIdentifier: String? = nil, syncConfiguration: SyncConfiguration? = nil, encryptionKey: Data? = nil, readOnly: Bool = false, schemaVersion: UInt64 = 0, migrationBlock: MigrationBlock? = nil, deleteRealmIfMigrationNeeded: Bool = false, shouldCompactOnLaunch: ((Int, Int) -> Bool)? = nil, objectTypes: [ObjectBase.Type]? = nil)
参数
fileURL
Realm 文件的本地 URL。
inMemoryIdentifier
用于标识特定内存中 Realm 的字符串。
syncConfiguration
对于打算与MongoDB Realm同步的 Realm,这是一个同步配置。
encryptionKey
用于加密数据的可选 64 字节密钥。
readOnly
Realm 是否为只读(对于只读文件必须为 true)。
schemaVersion
当前模式版本。
migrationBlock
将 Realm 迁移到当前版本的区块。
deleteRealmIfMigrationNeeded
如果
true
,则在需要迁移时使用提供的模式重新创建 Realm 文件。shouldCompactOnLaunch
在进程生命周期中首次打开 Realm 时调用的区块,用于确定是否应在将其返回给用户之前对其进行压缩。 系统会向其传递总文件大小(数据 + 可用空间)以及文件中数据使用的总字节数。
Return `true ` to indicate that an attempt to compact the file should be made. The compaction will be skipped if another process is accessing it.
objectTypes
Object
和EmbeddedObject
子类的子集保留在 Realm 中。
-
用于配置Realm以与MongoDB Realm同步的配置值。 与
inMemoryIdentifier
互斥。声明
Swift
public var syncConfiguration: SyncConfiguration? { get set }
-
Realm 文件的本地 URL。 与
inMemoryIdentifier
互斥。声明
Swift
public var fileURL: URL? { get set }
-
string用于标识特定内存中Realm 的 。与
fileURL
和syncConfiguration
互斥。声明
Swift
public var inMemoryIdentifier: String? { get set }
-
用于加密数据的 64 字节密钥;如果未启用加密,则为
nil
。声明
Swift
public var encryptionKey: Data?
-
是否以只读模式打开 Realm。
对于非同步 Realm,这是打开不可写入或位于不可写入目录中的 Realm 文件所必需的。 这只应用于在打开时不会被任何人修改的文件,而不仅仅是获取可能被其他线程或进程写入的文件的只读视图。 以只读模式打开需要禁用 Realm 的读取器/写入器协调,因此从另一个进程提交写事务会导致崩溃。
同步 Realm 必须始终可写(否则无法进行同步),而这只是禁止在 Realm 上执行写事务(write transaction)。此外,它还会跳过一些对 Realm 进行的自动写入,例如初始化 Realm 的模式。 对于同步用户没有写入权限的 Realm,设置
readOnly = YES
并不是严格要求的,但强烈建议这样做,因为它将改进错误报告并及早捕获一些错误。使用基于查询的同步的 Realm 无法以只读模式打开。
声明
Swift
public var readOnly: Bool
-
当前模式版本。
声明
Swift
public var schemaVersion: UInt64
-
将 Realm 迁移到当前版本的区块。
声明
Swift
public var migrationBlock: MigrationBlock?
-
如果需要迁移,是否使用提供的模式重新创建 Realm 文件。 当存储的模式与提供的模式不同,或者存储的模式版本与此配置上的版本不同时,就会出现这种情况。 如果需要或执行迁移,则将此属性设置为
true
会删除该文件。注意
将此属性设置为true
不会禁用文件格式迁移。声明
Swift
public var deleteRealmIfMigrationNeeded: Bool { get set }
-
在进程生命周期中首次打开 Realm 时调用的区块,用于确定是否应在将其返回给用户之前对其进行压缩。 系统会向其传递总文件大小(数据 + 可用空间)以及文件中数据使用的总字节数。
返回
true
表示应尝试压缩文件。 如果另一个进程正在访问它,则将跳过压实。声明
Swift
public var shouldCompactOnLaunch: ((Int, Int) -> Bool)?
-
Realm 托管的类。
声明
Swift
public var objectTypes: [ObjectBase.Type]? { get set }
-
尝试启动写事务(write transaction)时,在引发异常之前,Realm 文件中活动版本的最大数量。
Realm 提供 MVCC 快照隔离,这意味着一个线程上的写入不会覆盖另一线程上正在读取的数据,而是写入该数据的新副本。当 Realm 刷新时,它会更新到最新版本的数据并释放旧版本,从而允许它们被后续写事务(write transaction)覆盖。
在正常情况下,这不是问题,但如果活动版本的数量过多,则会对磁盘上的文件大小产生负面影响。 当同时在多个不同线程上执行写入时、长时间持有冻结对象时或在不允许 Realm 刷新的背景线程上执行长时间操作时,都可能会发生这种情况。
将此属性设置为非零值,超过设立的版本数则会引发异常。 可以在开发期间以较低的值使用此值,以帮助识别可能有问题的位置,或者在生产使用中导致应用崩溃,而不是生成太大而无法打开的Realm 文件。
声明
Swift
public var maximumNumberOfActiveVersions: UInt?
-
配置值的人类可读描述。
声明
Swift
public var description: String { get }