RLMObject

Objective-C

@interface RLMObject : RLMObjectBase <RLMThreadConfined>

迅速

@_nonSendable(_assumed) class RLMObject : RLMObjectBase, RLMThreadConfined

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 或是 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)时发送。

创建和初始化对象

  • 创建 Realm 对象的非托管实例。

    RLMRealm实例调用addObject: ,以将非托管对象添加到该 Realm 中。

    [RLMRealm addObject:]

    声明

    Objective-C

    - (nonnull instancetype)init;

    迅速

    init()
  • 创建 Realm 对象的非托管实例。

    传入NSArrayNSDictionary实例以设置对象属性的值。

    RLMRealm实例调用addObject: ,以将非托管对象添加到该 Realm 中。

    [RLMRealm addObject:]

    声明

    Objective-C

    - (nonnull instancetype)initWithValue:(nonnull id)value;

    迅速

    convenience init(value: Any)
  • 返回 Realm 对象子类的类名。

    警告

    请勿覆盖。 Realm 依赖此方法返回准确的类名。

    声明

    Objective-C

    + (nonnull NSString *)className;

    迅速

    class func className() -> String

    返回值

    模型类的类名。

  • 使用给定值创建 Realm 对象的实例,并将其添加到默认 Realm。

    如果参数中包含嵌套对象,则将对这些对象递归调用createInDefaultRealmWithValue:

    value参数可以是键值编码兼容对象、从NSJSONSerialization中的方法返回的数组或字典,或者是包含每个托管属性一个元素的数组。

    如果任何必需属性不存在且未为这些属性定义默认值,则会引发异常。

    如果value参数是数组,则所有属性都必须存在、有效,并且顺序与模型中定义的属性相同。

    defaultPropertyValues

    声明

    Objective-C

    + (nonnull instancetype)createInDefaultRealmWithValue:(nonnull id)value;

    迅速

    class func createInDefaultRealm(withValue value: Any) -> Self

    参数

    value

    用于填充对象的值。

  • 使用给定值创建一个Realm 对象的实例,并将其添加到指定的 Realm。

    如果参数中包含嵌套对象,则将对这些对象递归调用createInRealm:withValue:

    value参数可以是键值编码兼容对象、从NSJSONSerialization中的方法返回的数组或字典,或者是包含每个托管属性一个元素的数组。

    如果任何必需属性不存在且未为这些属性定义默认值,则会引发异常。

    如果value参数是数组,则所有属性都必须存在、有效,并且顺序与模型中定义的属性相同。

    defaultPropertyValues

    声明

    Objective-C

    + (nonnull instancetype)createInRealm:(nonnull RLMRealm *)realm
                                withValue:(nonnull id)value;

    迅速

    class func create(in realm: RLMRealm, withValue value: Any) -> Self

    参数

    realm

    应托管新创建对象的 Realm。

    value

    用于填充对象的值。

  • 在默认 Realm 中创建或更新 Realm 对象。

    该方法只能在定义了主键的 Realm 对象类型上调用。 如果默认 Realm 中已存在具有相同主键值的对象,则更新其值并返回该对象。 否则,该方法会在默认 Realm 中创建并填充该对象的新实例。

    如果参数中包含嵌套对象,如果它们具有主键,则将对其递归调用createOrUpdateInDefaultRealmWithValue: ,如果没有主键,则将对其递归调用createInDefaultRealmWithValue:

    value参数用于填充对象。 它可以是 Realm 对象、键值编码兼容对象、从NSJSONSerialization中的方法返回的数组或字典,或者每个托管属性都有一个元素的数组。

    创建对象时,如果任何必需属性不存在且未为这些属性定义默认值,则会引发异常。

    如果value参数是已由默认 Realm 托管的 Realm 对象,则参数的类型与接收者的类型相同,并且对象的托管属性具有相同的值,则此方法不执行任何操作。

    如果正在更新对象,则其模式中定义的每个属性都将通过使用键值编码从value复制来进行设置。 如果value参数不响应给定属性名称(或 getter 名称,如果已定义)的valueForKey: ,则该值将保持不变。 通过使用NSNull作为更新值,可以将对象上的可空属性设置为零。 即使现有值与所设置的新值相同,每个属性也会被设置,并且通知会报告它们全部被更改。 请参阅createOrUpdateModifiedInDefaultRealmWithValue:以了解此函数的一个版本,该版本仅设置已更改的值。

    如果value参数是数组,则所有属性都必须存在、有效,并且顺序与模型中定义的属性相同。

    defaultPropertyValuesprimaryKey

    声明

    Objective-C

    + (nonnull instancetype)createOrUpdateInDefaultRealmWithValue:(nonnull id)value;

    迅速

    class func createOrUpdateInDefaultRealm(withValue value: Any) -> Self

    参数

    value

    用于填充对象的值。

  • 在默认 Realm 中创建或更新 Realm 对象。

    该方法只能在定义了主键的 Realm 对象类型上调用。 如果默认 Realm 中已存在具有相同主键值的对象,则更新其值并返回该对象。 否则,该方法会在默认 Realm 中创建并填充该对象的新实例。

    如果参数中包含嵌套对象,如果它们具有主键,则将对其递归调用createOrUpdateModifiedInDefaultRealmWithValue: ,如果没有主键,则将对其递归调用createInDefaultRealmWithValue:

    value参数用于填充对象。 它可以是 Realm 对象、键值编码兼容对象、从NSJSONSerialization中的方法返回的数组或字典,或者每个托管属性都有一个元素的数组。

    创建对象时,如果任何必需属性不存在且未为这些属性定义默认值,则会引发异常。

    如果value参数是已由默认 Realm 托管的 Realm 对象,则参数的类型与接收者的类型相同,并且对象的托管属性具有相同的值,则此方法不执行任何操作。

    如果正在更新对象,则其模式中定义的每个属性都将通过使用键值编码从value复制来进行设置。 如果value参数不响应给定属性名称(或 getter 名称,如果已定义)的valueForKey: ,则该值将保持不变。 通过使用NSNull作为更新值,可以将对象上的可空属性设置为零。 与createOrUpdateInDefaultRealmWithValue:不同,它只设置值已更改的属性,并且此调用生成的任何更改通知将仅报告哪些属性实际已更改。

    检查哪些属性已更改会产生少量开销,因此当设置的所有或几乎所有属性均已更改时,此方法可能会较慢。 如果正在设置的大部分或全部属性没有更改,则此方法比无条件设置所有属性要快得多,并且还会减少必须写入 Realm 的数据量,从而节省 I/O 时间和磁盘空间。

    如果value参数是数组,则所有属性都必须存在、有效,并且顺序与模型中定义的属性相同。

    defaultPropertyValuesprimaryKey

    声明

    Objective-C

    + (nonnull instancetype)createOrUpdateModifiedInDefaultRealmWithValue:
        (nonnull id)value;

    迅速

    class func createOrUpdateModifiedInDefaultRealm(withValue value: Any) -> Self

    参数

    value

    用于填充对象的值。

  • 在指定 Realm 中创建或更新 Realm 对象。

    该方法只能在定义了主键的 Realm 对象类型上调用。 如果给定 Realm 中已存在具有相同主键值的对象,则更新其值并返回该对象。 否则,该方法会在给定 Realm 中创建并填充该对象的新实例。

    如果参数中包含嵌套对象,如果它们具有主键,则将对其递归调用createOrUpdateInRealm:withValue: ,如果没有主键,则将对其递归调用createInRealm:withValue:

    value参数用于填充对象。 它可以是 Realm 对象、键值编码兼容对象、从NSJSONSerialization中的方法返回的数组或字典,或者每个托管属性都有一个元素的数组。

    创建对象时,如果任何必需属性不存在且未为这些属性定义默认值,则会引发异常。

    如果value参数是已由给定 Realm 托管的 Realm 对象,则参数的类型与接收者的类型相同,并且对象的托管属性具有相同的值,则此方法不执行任何操作。

    如果正在更新对象,则其模式中定义的每个属性都将通过使用键值编码从value复制来进行设置。 如果value参数不响应给定属性名称(或 getter 名称,如果已定义)的valueForKey: ,则该值将保持不变。 通过使用NSNull作为更新值,可以将对象上的可空属性设置为零。 即使现有值与所设置的新值相同,每个属性也会被设置,并且通知会报告它们全部被更改。 请参阅createOrUpdateModifiedInRealm:withValue:以了解此函数的一个版本,该版本仅设置已更改的值。

    如果value参数是数组,则所有属性都必须存在、有效,并且顺序与模型中定义的属性相同。

    defaultPropertyValuesprimaryKey

    声明

    Objective-C

    + (nonnull instancetype)createOrUpdateInRealm:(nonnull RLMRealm *)realm
                                        withValue:(nonnull id)value;

    迅速

    class func createOrUpdate(in realm: RLMRealm, withValue value: Any) -> Self

    参数

    realm

    应拥有该对象的 Realm。

    value

    用于填充对象的值。

  • 在指定 Realm 中创建或更新 Realm 对象。

    该方法只能在定义了主键的 Realm 对象类型上调用。 如果给定 Realm 中已存在具有相同主键值的对象,则更新其值并返回该对象。 否则,该方法会在给定 Realm 中创建并填充该对象的新实例。

    如果参数中包含嵌套对象,如果它们具有主键,则将对其递归调用createOrUpdateInRealm:withValue: ,如果没有主键,则将对其递归调用createInRealm:withValue:

    value参数用于填充对象。 它可以是 Realm 对象、键值编码兼容对象、从NSJSONSerialization中的方法返回的数组或字典,或者每个托管属性都有一个元素的数组。

    创建对象时,如果任何必需属性不存在且未为这些属性定义默认值,则会引发异常。

    如果value参数是已由给定 Realm 托管的 Realm 对象,则参数的类型与接收者的类型相同,并且对象的托管属性具有相同的值,则此方法不执行任何操作。

    如果正在更新对象,则其模式中定义的每个属性都将通过使用键值编码从value复制来进行设置。 如果value参数不响应给定属性名称(或 getter 名称,如果已定义)的valueForKey: ,则该值将保持不变。 通过使用NSNull作为更新值,可以将对象上的可空属性设置为零。 与createOrUpdateInRealm:withValue:不同,它只设置值已更改的属性,并且此调用生成的任何更改通知将仅报告哪些属性实际已更改。

    检查哪些属性已更改会产生少量开销,因此当设置的所有或几乎所有属性均已更改时,此方法可能会较慢。 如果正在设置的大部分或全部属性没有更改,则此方法比无条件设置所有属性要快得多,并且还会减少必须写入 Realm 的数据量,从而节省 I/O 时间和磁盘空间。

    如果value参数是数组,则所有属性都必须存在、有效,并且顺序与模型中定义的属性相同。

    defaultPropertyValuesprimaryKey

    声明

    Objective-C

    + (nonnull instancetype)createOrUpdateModifiedInRealm:(nonnull RLMRealm *)realm
                                                withValue:(nonnull id)value;

    迅速

    class func createOrUpdateModified(in realm: RLMRealm, withValue value: Any) -> Self

    参数

    realm

    应拥有该对象的 Realm。

    value

    用于填充对象的值。

属性

  • 托管对象的 Realm,如果对象为非托管对象,则为nil

    声明

    Objective-C

    @property (nonatomic, readonly, nullable) RLMRealm *realm;

    迅速

    var realm: RLMRealm? { get }
  • 列出对象的托管属性的对象模式。

    声明

    Objective-C

    @property (nonatomic, readonly) RLMObjectSchema *_Nonnull objectSchema;

    迅速

    var objectSchema: RLMObjectSchema { get }
  • 指示对象是否因现已无效而无法再访问。

    如果对象已从托管它的 Realm 中删除,或者对该 Realm 调用了invalidate ,则无法再访问该对象。

    声明

    Objective-C

    @property (nonatomic, readonly, getter=isInvalidated) BOOL invalidated;

    迅速

    var isInvalidated: Bool { get }
  • 指示此对象是否已冻结。

    声明

    Objective-C

    @property (nonatomic, readonly, getter=isFrozen) BOOL frozen;

    迅速

    var isFrozen: Bool { get }

自定义对象

  • 返回应编制索引的属性的属性名称数组。

    仅支持字符串、整数、布尔值和NSDate属性。

    声明

    Objective-C

    + (nonnull NSArray<NSString *> *)indexedProperties;

    迅速

    class func indexedProperties() -> [String]

    返回值

    属性名称数组。

  • 重写此方法以指定用于每个属性的默认值。

    声明

    Objective-C

    + (nullable NSDictionary *)defaultPropertyValues;

    迅速

    class func defaultPropertyValues() -> [AnyHashable : Any]?

    返回值

    将属性名称映射到其默认值的字典。

  • 重写此方法以指定用作主键的属性名称。

    只有类型为RLMPropertyTypeStringRLMPropertyTypeInt的属性才能指定为主键。每当设置属性时,主键属性都会为每个值强制唯一性,这会产生少量开销。 系统会自动为主键属性创建索引。

    声明

    Objective-C

    + (nullable NSString *)primaryKey;

    迅速

    class func primaryKey() -> String?

    返回值

    指定为主键的属性的名称。

  • 重写此方法以指定要忽略的属性的名称。 这些属性不会由托管该对象的 Realm 进行托管。

    声明

    Objective-C

    + (nullable NSArray<NSString *> *)ignoredProperties;

    迅速

    class func ignoredProperties() -> [String]?

    返回值

    要忽略的属性名称数组。

  • 重写此方法以指定非可选属性的名称(即 不能分配nil值)。

    默认情况下,其值可设置为nil的类型的所有属性均被视为可选属性。 要要求 Realm 中的对象始终为属性存储非nil值,请将该属性的名称添加到从此方法返回的数组中。

    RLMObject类型的属性不能是非可选的。 数组和NSNumber属性可以是非可选的,但没有理由这样做:数组不支持存储 nil,如果需要非可选数字,则应使用基元类型。

    声明

    Objective-C

    + (nonnull NSArray<NSString *> *)requiredProperties;

    迅速

    class func requiredProperties() -> [String]

    返回值

    所需属性名称的数组。

  • 重写此方法以提供与包含链接对象的属性相关的信息。

    在此方法返回的字典中,每个RLMLinkingObjects类型的属性都必须有一个由属性名称组成的键。 相应的值必须是RLMPropertyDescriptor的实例,用于描述属性链接到的类和属性。

    return @{ @"owners": [RLMPropertyDescriptor descriptorWithClass:Owner.class propertyName:@"dogs"] };
    

    声明

    Objective-C

    + (nonnull NSDictionary<NSString *, RLMPropertyDescriptor *> *)
        linkingObjectsProperties;

    迅速

    class func linkingObjectsProperties() -> [String : RLMPropertyDescriptor]

    返回值

    将属性名称映射到RLMPropertyDescriptor实例的字典。

从默认 Realm 中获取和查询对象

  • 从默认 Realm 中返回该 Realm 对象类型 的所有对象。

    声明

    Objective-C

    + (nonnull RLMResults *)allObjects;

    迅速

    class func allObjects() -> RLMResults

    返回值

    一个RLMResults ,包含默认 Realm 中该类型的所有对象。

  • 从默认 Realm 中返回与给定谓词匹配的 Realm 对象类型的所有对象。

    声明

    Objective-C

    + (nonnull RLMResults *)objectsWhere:(nonnull NSString *)predicateFormat, ...;

    参数

    predicateFormat

    谓词格式字符串,可以选择后跟可变数量的参数。

    返回值

    一个RLMResults ,包含默认 Realm 中与给定谓词匹配的所有此类对象。

  • 从默认 Realm 中返回与给定谓词匹配的 Realm 对象类型的所有对象。

    声明

    Objective-C

    + (nonnull RLMResults *)objectsWithPredicate:(nullable NSPredicate *)predicate;

    迅速

    class func objects(with predicate: NSPredicate?) -> RLMResults

    参数

    predicate

    用于筛选对象的谓词。

    返回值

    一个RLMResults ,包含默认 Realm 中与给定谓词匹配的所有此类对象。

  • 从默认 Realm 中检索具有给定主键的 Realm 对象类型的单个实例。

    返回具有给定主键的默认 Realm 对象,如果该对象不存在,则返回nil 。 这比其他等效的[[SubclassName objectsWhere:@"primaryKeyPropertyName = %@", key] firstObject]稍快。

    此方法要求在接收子类上覆盖primaryKey

    -primaryKey

    声明

    Objective-C

    + (nullable instancetype)objectForPrimaryKey:(nullable id)primaryKey;

    迅速

    class func object(forPrimaryKey primaryKey: Any?) -> Self?

    返回值

    此Realm 对象类型的对象;如果具有给定主键的对象不存在,则为nil

查询特定 Realm

  • 从指定 Realm 中返回该对象类型的所有对象。

    声明

    Objective-C

    + (nonnull RLMResults *)allObjectsInRealm:(nonnull RLMRealm *)realm;

    迅速

    class func allObjects(in realm: RLMRealm) -> RLMResults

    参数

    realm

    要查询的 Realm。

    返回值

    一个RLMResults ,包含指定 Realm 中该类型的所有对象。

  • 从指定的 Realm 中返回与给定谓词匹配的此 Realm 对象类型的所有对象。

    声明

    Objective-C

    + (nonnull RLMResults *)objectsInRealm:(nonnull RLMRealm *)realm
                                     where:(nonnull NSString *)predicateFormat, ...;

    参数

    predicateFormat

    谓词格式字符串,可以选择后跟可变数量的参数。

    realm

    要查询的 Realm。

    返回值

    一个RLMResults ,包含指定 Realm 中与给定谓词匹配的所有此类对象。

  • 从指定的 Realm 中返回与给定谓词匹配的此 Realm 对象类型的所有对象。

    声明

    Objective-C

    + (nonnull RLMResults *)objectsInRealm:(nonnull RLMRealm *)realm
                             withPredicate:(nullable NSPredicate *)predicate;

    迅速

    class func objects(in realm: RLMRealm, with predicate: NSPredicate?) -> RLMResults

    参数

    predicate

    用于筛选元素的谓词。

    realm

    要查询的 Realm。

    返回值

    一个RLMResults ,包含指定 Realm 中与给定谓词匹配的所有此类对象。

  • 从指定的 Realm 中检索具有给定主键的 Realm 对象类型的单个实例。

    返回具有给定主键的指定 Realm 对象,如果该对象不存在,则返回nil 。 这比其他等效的[[SubclassName objectsInRealm:realm where:@"primaryKeyPropertyName = %@", key] firstObject]稍快。

    此方法要求在接收子类上覆盖primaryKey

    -primaryKey

    声明

    Objective-C

    + (nullable instancetype)objectInRealm:(nonnull RLMRealm *)realm
                             forPrimaryKey:(nullable id)primaryKey;

    迅速

    class func object(in realm: RLMRealm, forPrimaryKey primaryKey: Any?) -> Self?

    返回值

    此Realm 对象类型的对象;如果具有给定主键的对象不存在,则为nil

通知

  • 注册一个区块,以便在每次对象更改时调用。

    在每次写事务(write transaction)删除对象或修改对象的任何托管属性(包括将属性设置为其现有值的自分配)后,将异步调用该块。

    对于在不同线程或不同进程中执行的写事务(write transaction),当管理 Realm(自动)刷新到包含更改的版本时,将调用该区块,而对于本地写事务(write transaction),将在提交写事务(write transaction)后的未来某个时间点调用该区块。

    通知是通过标准事件循环传递的,因此当事件循环被其他活动阻止时无法传递。当无法立即传递通知时,可以将多个通知合并为一个通知。

    RLMArrayRLMResults不同,添加新的通知块后,不会执行“初始”回调。

    只有由 Realm 托管的对象才能以这种方式进行观察。只要您希望将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用-invalidate

    在回调块中捕获对观察到的对象的强引用是安全的。 由于回调由返回的令牌而不是对象本身保留,因此不存在保留周期。

    警告

    在写事务(write transaction)期间、当包含的 Realm 为只读时或在非托管对象上时,无法调用此方法。

    声明

    Objective-C

    - (nonnull RLMNotificationToken *)addNotificationBlock:
        (nonnull RLMObjectChangeBlock)block;

    迅速

    func addNotificationBlock(_ block: @escaping RLMObjectChangeBlock) -> RLMNotificationToken

    参数

    block

    发生更改时要调用的区块。

    返回值

    只要您希望传递更新,就必须持有的令牌。

  • 注册一个区块,以便在每次对象更改时调用。

    在每次写事务(write transaction)删除对象或修改对象的任何托管属性(包括将属性设置为其现有值的自分配)后,将异步调用该块。

    对于在不同线程或不同进程中执行的写事务(write transaction),当管理 Realm(自动)刷新到包含更改的版本时,将调用该区块,而对于本地写事务(write transaction),将在提交写事务(write transaction)后的未来某个时间点调用该区块。

    通知将传递到给定队列。 如果队列阻塞且无法立即传递通知,则多个通知可能会合并为一个通知。

    RLMArrayRLMResults不同,添加新的通知块后,不会执行“初始”回调。

    只有由 Realm 托管的对象才能以这种方式进行观察。只要您希望将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用-invalidate

    在回调块中捕获对观察到的对象的强引用是安全的。 由于回调由返回的令牌而不是对象本身保留,因此不存在保留周期。

    警告

    在写事务(write transaction)期间、当包含的 Realm 为只读时或在非托管对象上时,无法调用此方法。

    警告

    该队列必须是串行队列。

    声明

    Objective-C

    - (nonnull RLMNotificationToken *)
        addNotificationBlock:(nonnull RLMObjectChangeBlock)block
                       queue:(nonnull dispatch_queue_t)queue;

    迅速

    func addNotificationBlock(_ block: @escaping RLMObjectChangeBlock, queue: dispatch_queue_t) -> RLMNotificationToken

    参数

    block

    发生更改时要调用的区块。

    queue

    要向其传递通知的串行队列。

    返回值

    只要您希望传递更新,就必须持有的令牌。

  • 注册一个区块,以便在每次对象更改时调用。

    在每次写事务(write transaction)删除对象或修改对象的任何托管属性(包括将属性设置为其现有值的自分配)后,将异步调用该块。

    对于在不同线程或不同进程中执行的写事务(write transaction),当管理 Realm(自动)刷新到包含更改的版本时,将调用该区块,而对于本地写事务(write transaction),将在提交写事务(write transaction)后的未来某个时间点调用该区块。

    通知将传递到给定队列。 如果队列阻塞且无法立即传递通知,则多个通知可能会合并为一个通知。

    RLMArrayRLMResults不同,添加新的通知块后,不会执行“初始”回调。

    只有由 Realm 托管的对象才能以这种方式进行观察。只要您希望将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用-invalidate

    在回调块中捕获对观察到的对象的强引用是安全的。 由于回调由返回的令牌而不是对象本身保留,因此不存在保留周期。

    警告

    在写事务(write transaction)期间、当包含的 Realm 为只读时或在非托管对象上时,无法调用此方法。

    警告

    该队列必须是串行队列。

    声明

    Objective-C

    - (nonnull RLMNotificationToken *)
        addNotificationBlock:(nonnull RLMObjectChangeBlock)block
                    keyPaths:(nonnull NSArray<NSString *> *)keyPaths
                       queue:(nonnull dispatch_queue_t)queue;

    迅速

    func addNotificationBlock(_ block: @escaping RLMObjectChangeBlock, keyPaths: [String], queue: dispatch_queue_t) -> RLMNotificationToken

    参数

    block

    发生更改时要调用的区块。

    keyPaths

    这些键路径上发生的更改将调用该区块。 如果未给出键路径,则为每个属性键路径传递通知。

    queue

    要向其传递通知的串行队列。

    返回值

    只要您希望传递更新,就必须持有的令牌。

  • 注册一个区块,以便在每次对象更改时调用。

    在每次写事务(write transaction)删除对象或修改对象的任何托管属性(包括将属性设置为其现有值的自分配)后,将异步调用该块。

    对于在不同线程或不同进程中执行的写事务(write transaction),当管理 Realm(自动)刷新到包含更改的版本时,将调用该区块,而对于本地写事务(write transaction),将在提交写事务(write transaction)后的未来某个时间点调用该区块。

    通知将传递到给定队列。 如果队列阻塞且无法立即传递通知,则多个通知可能会合并为一个通知。

    RLMArrayRLMResults不同,添加新的通知块后,不会执行“初始”回调。

    只有由 Realm 托管的对象才能以这种方式进行观察。只要您希望将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用-invalidate

    在回调块中捕获对观察到的对象的强引用是安全的。 由于回调由返回的令牌而不是对象本身保留,因此不存在保留周期。

    警告

    在写事务(write transaction)期间、当包含的 Realm 为只读时或在非托管对象上时,无法调用此方法。

    警告

    该队列必须是串行队列。

    声明

    Objective-C

    - (nonnull RLMNotificationToken *)
        addNotificationBlock:(nonnull RLMObjectChangeBlock)block
                    keyPaths:(nonnull NSArray<NSString *> *)keyPaths;

    迅速

    func addNotificationBlock(_ block: @escaping RLMObjectChangeBlock, keyPaths: [String]) -> RLMNotificationToken

    参数

    block

    发生更改时要调用的区块。

    keyPaths

    这些键路径上发生的更改将调用该区块。 如果未给出键路径,则为每个属性键路径传递通知。

    返回值

    只要您希望传递更新,就必须持有的令牌。

其他实例方法

  • 如果另一个 Realm 对象实例指向与管理接收器的 Realm 中的接收器相同的对象,则返回 YES。

    对于冻结对象和带有主键的Realm 对象类型,会重写isEqual:以使用与此方法相同的逻辑(以及hash的相应实现)。没有主键的非冻结对象对isEqual:hash使用指针标识。

    声明

    Objective-C

    - (BOOL)isEqualToObject:(nonnull RLMObject *)object;

    迅速

    func isEqual(to object: RLMObject) -> Bool

    参数

    object

    与接收器进行比较的对象。

    返回值

    该对象是否与接收者表示同一对象。

  • 返回此对象的冻结(不可变)快照。

    冻结副本是一个不可变对象,其中包含与该对象当前包含的数据相同的数据,但在写入包含的 Realm 时不会更新。 与活动对象不同,冻结对象可以从任何线程访问。

    警告

    在 Realm 上执行写事务(write transaction)时长时间持有冻结对象可能会导致 Realm 文件变大。有关更多信息,请参阅Realm.Configuration.maximumNumberOfActiveVersions

    警告

    此方法只能在托管对象上调用。

    声明

    Objective-C

    - (nonnull instancetype)freeze;

    迅速

    func freeze() -> Self
  • 返回此对象的实时(可变)引用。

    此方法为同一冻结对象的实时副本创建托管访问器。 如果在已经存在的对象上调用,则会返回 self。

    声明

    Objective-C

    - (nonnull instancetype)thaw;

    迅速

    func thaw() -> Self