Classes

The following classes are available globally.

  • RLMArray is the container type in Realm used to define to-many relationships.

    Unlike an NSArray, RLMArrays hold a single type, specified by the objectClassName property. This is referred to in these docs as the “type” of the array.

    When declaring an RLMArray property, the type must be marked as conforming to a protocol by the same name as the objects it should contain (see the RLM_COLLECTION_TYPE macro). In addition, the property can be declared using Objective-C generics for better compile-time type safety.

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

    RLMArrays can be queried with the same predicates as RLMObject and RLMResults.

    RLMArrays cannot be created directly. RLMArray properties on RLMObjects are lazily created when accessed, or can be obtained by querying a Realm.

    Key-Value Observing

    RLMArray supports array key-value observing on RLMArray properties on RLMObject subclasses, and the invalidated property on RLMArray instances themselves is key-value observing compliant when the RLMArray is attached to a managed RLMObject (RLMArrays on unmanaged RLMObjects will never become invalidated).

    Because RLMArrays are attached to the object which they are a property of, they do not require using the mutable collection proxy objects from -mutableArrayValueForKey: or KVC-compatible mutation methods on the containing object. Instead, you can call the mutation methods on the RLMArray directly.

    See more

    Declaration

    Objective-C

    @interface RLMArray<RLMObjectType> : NSObject <RLMCollection>

    Swift

    @_nonSendable(_assumed) class RLMArray<RLMObjectType> : NSObject, RLMCollection where RLMObjectType : AnyObject
  • A task object which can be used to observe or cancel an async open.

    When a synchronized Realm is opened asynchronously, the latest state of the Realm is downloaded from the server before the completion callback is invoked. This task object can be used to observe the state of the download or to cancel it. This should be used instead of trying to observe the download via the sync session as the sync session itself is created asynchronously, and may not exist yet when -[RLMRealm asyncOpenWithConfiguration:completion:] returns.

    See more

    Declaration

    Objective-C

    
    @interface RLMAsyncOpenTask : NSObject

    Swift

    @_nonSendable(_assumed) class RLMAsyncOpenTask : NSObject, @unchecked Sendable
  • An RLMSortDescriptor stores a property name and a sort order for use with sortedResultsUsingDescriptors:. It is similar to NSSortDescriptor, but supports only the subset of functionality which can be efficiently run by Realm’s query engine.

    RLMSortDescriptor instances are immutable.

    See more

    Declaration

    Objective-C

    
    @interface RLMSortDescriptor : NSObject

    Swift

    @_nonSendable(_assumed) class RLMSortDescriptor : NSObject, @unchecked Sendable
  • A RLMCollectionChange object encapsulates information about changes to collections that are reported by Realm notifications.

    RLMCollectionChange is passed to the notification blocks registered with -addNotificationBlock on RLMArray and RLMResults, and reports what rows in the collection changed since the last time the notification block was called.

    The change information is available in two formats: a simple array of row indices in the collection for each type of change, and an array of index paths in a requested section suitable for passing directly to UITableView‘s batch update methods. A complete example of updating a UITableView named tv:

    [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];
    

    All of the arrays in an RLMCollectionChange are always sorted in ascending order.

    See more

    Declaration

    Objective-C

    @interface RLMCollectionChange : NSObject

    Swift

    @_nonSendable(_assumed) class RLMCollectionChange : NSObject
  • A 128-bit IEEE 754-2008 decimal floating point number.

    This type is similar to Swift’s built-in Decimal type, but allocates bits differently, resulting in a different representable range. (NS)Decimal stores a significand of up to 38 digits long and an exponent from -128 to 127, while this type stores up to 34 digits of significand and an exponent from -6143 to 6144.

    See more

    Declaration

    Objective-C

    @interface RLMDecimal128 : NSObject <NSCopying>

    Swift

    @_nonSendable(_assumed) class RLMDecimal128 : NSObject, NSCopying, @unchecked Sendable
  • RLMDictionary is a container type in Realm representing a dynamic collection of key-value pairs.

    Unlike NSDictionary, RLMDictionarys hold a single key and value type. This is referred to in these docs as the “type” and “keyType” of the dictionary.

    When declaring an RLMDictionary property, the object type and keyType must be marked as conforming to a protocol by the same name as the objects it should contain.

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

    RLMDictionarys can be queried with the same predicates as RLMObject and RLMResults.

    RLMDictionarys cannot be created directly. RLMDictionary properties on RLMObjects are lazily created when accessed, or can be obtained by querying a Realm.

    RLMDictionary only supports NSString as a key. Realm disallows the use of . or $ characters within a dictionary key.

    Key-Value Observing

    RLMDictionary supports dictionary key-value observing on RLMDictionary properties on RLMObject subclasses, and the invalidated property on RLMDictionary instances themselves is key-value observing compliant when the RLMDictionary is attached to a managed RLMObject (RLMDictionarys on unmanaged RLMObjects will never become invalidated).

    See more

    Declaration

    Objective-C

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

    Swift

    @_nonSendable(_assumed) class RLMDictionary<RLMKeyType, RLMObjectType> : NSObject, RLMCollection where RLMKeyType : AnyObject, RLMObjectType : AnyObject
  • A RLMDictionaryChange object encapsulates information about changes to dictionaries that are reported by Realm notifications.

    RLMDictionaryChange is passed to the notification blocks registered with -addNotificationBlock on RLMDictionary, and reports what keys in the dictionary changed since the last time the notification block was called.

    See more

    Declaration

    Objective-C

    @interface RLMDictionaryChange : NSObject

    Swift

    @_nonSendable(_assumed) class RLMDictionaryChange : NSObject
  • RLMEmbeddedObject is a base class used to define Realm model objects.

    Embedded objects work similarly to normal objects, but are owned by a single parent Object (which itself may be embedded). Unlike normal top-level objects, embedded objects cannot be directly created in or added to a Realm. Instead, they can only be created as part of a parent object, or by assigning an unmanaged object to a parent object’s property. Embedded objects are automatically deleted when the parent object is deleted or when the parent is modified to no longer point at the embedded object, either by reassigning an RLMObject property or by removing the embedded object from the array containing it.

    Embedded objects can only ever have a single parent object which links to them, and attempting to link to an existing managed embedded object will throw an exception.

    The property types supported on RLMEmbeddedObject are the same as for RLMObject, except for that embedded objects cannot link to top-level objects, so RLMObject and RLMArray<RLMObject> properties are not supported (RLMEmbeddedObject and RLMArray<RLMEmbeddedObject> are).

    Embedded objects cannot have primary keys or indexed properties.

    See more

    Declaration

    Objective-C

    @interface RLMEmbeddedObject : RLMObjectBase <RLMThreadConfined>

    Swift

    @_nonSendable(_assumed) class RLMEmbeddedObject : RLMObjectBase, RLMThreadConfined
  • A class that represents the coordinates of a point formed by a latitude and a longitude value.

    • Latitude ranges between -90 and 90 degrees, inclusive.
    • Longitude ranges between -180 and 180 degrees, inclusive.
    • Altitude cannot have negative values.

    Values outside this ranges will return nil when trying to create a RLMGeospatialPoint.

    Note

    There is no dedicated type to store Geospatial points, instead points should be stored as GeoJson-shaped embedded object, as explained below. Geospatial queries (geoWithin) can only be executed in such a type of objects and will throw otherwise.

    Persisting geo points in Realm is currently done using duck-typing, which means that any model class with a specific shape can be queried as though it contained a geographical location. The recommended approach is using an embedded object.

    Warning

    This structure cannot be persisted and can only be used to build other geospatial shapes such as (RLMGeospatialBox, RLMGeospatialPolygon and RLMGeospatialCircle).

    Warning

    Altitude is not used in any of the query calculations.

    See more

    Declaration

    Objective-C

    @interface RLMGeospatialPoint : NSObject

    Swift

    class RLMGeospatialPoint : NSObject, @unchecked Sendable
  • A class that represents a rectangle, that can be used in a geospatial geoWithinquery.

    Warning

    This class cannot be persisted and can only be use within a geospatial geoWithin query.
    See more

    Declaration

    Objective-C

    @interface RLMGeospatialBox : NSObject <RLMGeospatial>

    Swift

    class RLMGeospatialBox : NSObject, RLMGeospatial, @unchecked Sendable
  • A class that represents a polygon, that can be used in a geospatial geoWithinquery.

    A RLMGeospatialPolygon describes a shape conformed of and outer Polygon, called outerRing, and 0 or more inner Polygons, called holes, which represents an unlimited number of internal holes inside the outer Polygon. A Polygon describes a shape conformed by at least three segments, where the last and the first RLMGeospatialPoint must be the same to indicate a closed polygon (meaning you need at least 4 points to define a polygon). Inner holes in a RLMGeospatialPolygon must be entirely inside the outer ring

    A hole has the following restrictions:

    • Holes may not cross, i.e. the boundary of a hole may not intersect both the interior and the exterior of any other hole.
    • Holes may not share edges, i.e. if a hole contains and edge AB, the no other hole may contain it.
    • Holes may share vertices, however no vertex may appear twice in a single hole.
    • No hole may be empty.
    • Only one nesting is allowed.

    Warning

    This class cannot be persisted and can only be use within a geospatial geoWithin query.

    See more

    Declaration

    Objective-C

    @interface RLMGeospatialPolygon : NSObject <RLMGeospatial>

    Swift

    class RLMGeospatialPolygon : NSObject, RLMGeospatial, @unchecked Sendable
  • This structure is a helper to represent/convert a distance. It can be used in geospatial queries like those represented by a RLMGeospatialCircle

    Warning

    This structure cannot be persisted and can only be used to build other geospatial shapes
    See more

    Declaration

    Objective-C

    @interface RLMDistance : NSObject

    Swift

    class RLMDistance : NSObject, @unchecked Sendable
  • A class that represents a circle, that can be used in a geospatial geoWithinquery.

    Warning

    This class cannot be persisted and can only be use within a geospatial geoWithin query.
    See more

    Declaration

    Objective-C

    @interface RLMGeospatialCircle : NSObject <RLMGeospatial>

    Swift

    class RLMGeospatialCircle : NSObject, RLMGeospatial, @unchecked Sendable
  • RLMLogger is used for creating your own custom logging logic.

    You can define your own logger creating an instance of RLMLogger and define the log function which will be invoked whenever there is a log message. Set this custom logger as you default logger using setDefaultLogger.

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

    Note

    By default default log threshold level is RLMLogLevelInfo, and logging strings are output to Apple System Logger.
    See more

    Declaration

    Objective-C

    @interface RLMLogger : NSObject

    Swift

    class RLMLogger : NSObject
  • RLMMigration instances encapsulate information intended to facilitate a schema migration.

    A RLMMigration instance is passed into a user-defined RLMMigrationBlock block when updating the version of a Realm. This instance provides access to the old and new database schemas, the objects in the Realm, and provides functionality for modifying the Realm during the migration.

    See more

    Declaration

    Objective-C

    @interface RLMMigration : NSObject

    Swift

    @_nonSendable(_assumed) class RLMMigration : NSObject
  • RLMObject is a base class for model objects representing data stored in Realms.

    Define your model classes by subclassing RLMObject and adding properties to be managed. Then instantiate and use your custom subclasses instead of using the RLMObject class directly.

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

    Supported property types

    • NSString
    • NSInteger, int, long, float, and double
    • BOOL or bool
    • NSDate
    • NSData
    • NSNumber<X>, where X is one of RLMInt, RLMFloat, RLMDouble or RLMBool, for optional number properties
    • RLMObject subclasses, to model many-to-one relationships.
    • RLMArray<X>, where X is an RLMObject subclass, to model many-to-many relationships.

    Querying

    You can initiate queries directly via the class methods: allObjects, objectsWhere:, and objectsWithPredicate:. These methods allow you to easily query a custom subclass for instances of that class in the default Realm.

    To search in a Realm other than the default Realm, use the allObjectsInRealm:, objectsInRealm:where:, and objectsInRealm:withPredicate: class methods.

    See

    RLMRealm

    Relationships

    See our Realm Swift Documentation for more details.

    Key-Value Observing

    All RLMObject properties (including properties you create in subclasses) are Key-Value Observing compliant, except for realm and objectSchema.

    Keep the following tips in mind when observing Realm objects:

    1. Unlike NSMutableArray properties, RLMArray properties do not require using the proxy object returned from -mutableArrayValueForKey:, or defining KVC mutation methods on the containing class. You can simply call methods on the RLMArray directly; any changes will be automatically observed by the containing object.
    2. Unmanaged RLMObject instances cannot be added to a Realm while they have any observed properties.
    3. Modifying managed RLMObjects within -observeValueForKeyPath:ofObject:change:context: is not recommended. Properties may change even when the Realm is not in a write transaction (for example, when -[RLMRealm refresh] is called after changes are made on a different thread), and notifications sent prior to the change being applied (when NSKeyValueObservingOptionPrior is used) may be sent at times when you cannot begin a write transaction.
    See more

    Declaration

    Objective-C

    @interface RLMObject : RLMObjectBase <RLMThreadConfined>

    Swift

    @_nonSendable(_assumed) class RLMObject : RLMObjectBase, RLMThreadConfined
  • Information about a specific property which changed in an RLMObject change notification.

    See more

    Declaration

    Objective-C

    @interface RLMPropertyChange : NSObject

    Swift

    @_nonSendable(_assumed) class RLMPropertyChange : NSObject
  • A 12-byte (probably) unique object identifier.

    ObjectIds are similar to a GUID or a UUID, and can be used to uniquely identify objects without a centralized ID generator. An ObjectID consists of:

    1. A 4 byte timestamp measuring the creation time of the ObjectId in seconds since the Unix epoch.
    2. A 5 byte random value
    3. A 3 byte counter, initialized to a random value.

    ObjectIds are intended to be fast to generate. Sorting by an ObjectId field will typically result in the objects being sorted in creation order.

    See more

    Declaration

    Objective-C

    @interface RLMObjectId : NSObject <NSCopying>

    Swift

    @_nonSendable(_assumed) class RLMObjectId : NSObject, NSCopying, @unchecked Sendable
  • This class represents Realm model object schemas.

    When using Realm, RLMObjectSchema instances allow performing migrations and introspecting the database’s schema.

    Object schemas map to tables in the core database.

    See more

    Declaration

    Objective-C

    
    @interface RLMObjectSchema : NSObject <NSCopying>

    Swift

    @_nonSendable(_assumed) class RLMObjectSchema : NSObject, NSCopying, @unchecked Sendable
  • RLMProperty instances represent properties managed by a Realm in the context of an object schema. Such properties may be persisted to a Realm file or computed from other data from the Realm.

    When using Realm, RLMProperty instances allow performing migrations and introspecting the database’s schema.

    These property instances map to columns in the core database.

    See more

    Declaration

    Objective-C

    
    @interface RLMProperty : NSObject

    Swift

    @_nonSendable(_assumed) class RLMProperty : NSObject, @unchecked Sendable
  • An RLMPropertyDescriptor instance represents a specific property on a given class.

    See more

    Declaration

    Objective-C

    
    @interface RLMPropertyDescriptor : NSObject

    Swift

    @_nonSendable(_assumed) class RLMPropertyDescriptor : NSObject, @unchecked Sendable
  • An RLMRealm instance (also referred to as “a Realm”) represents a Realm database.

    Realms can either be stored on disk (see +[RLMRealm realmWithURL:]) or in memory (see RLMRealmConfiguration).

    RLMRealm instances are cached internally, and constructing equivalent RLMRealm objects (for example, by using the same path or identifier) multiple times on a single thread within a single iteration of the run loop will normally return the same RLMRealm object.

    If you specifically want to ensure an RLMRealm instance is destroyed (for example, if you wish to open a Realm, check some property, and then possibly delete the Realm file and re-open it), place the code which uses the Realm within an @autoreleasepool {} and ensure you have no other strong references to it.

    Warning

    Non-frozen RLMRealm instances are thread-confined and cannot be shared across threads or dispatch queues. Trying to do so will cause an exception to be thrown. You must call this method on each thread you want to interact with the Realm on. For dispatch queues, this means that you must call it in each block which is dispatched, as a queue is not guaranteed to run all of its blocks on the same thread.
    See more

    Declaration

    Objective-C

    @interface RLMRealm : NSObject

    Swift

    @_nonSendable(_assumed) class RLMRealm : NSObject
  • A token which is returned from methods which subscribe to changes to a Realm.

    Change subscriptions in Realm return an RLMNotificationToken instance, which can be used to unsubscribe from the changes. You must store a strong reference to the token for as long as you want to continue to receive notifications. When you wish to stop, call the -invalidate method. Notifications are also stopped if the token is deallocated.

    See more

    Declaration

    Objective-C

    @interface RLMNotificationToken : NSObject

    Swift

    @_nonSendable(_assumed) class RLMNotificationToken : NSObject, @unchecked Sendable
  • An RLMRealmConfiguration instance describes the different options used to create an instance of a Realm.

    RLMRealmConfiguration instances are just plain NSObjects. Unlike RLMRealms and RLMObjects, they can be freely shared between threads as long as you do not mutate them.

    Creating configuration objects for class subsets (by setting the objectClasses property) can be expensive. Because of this, you will normally want to cache and reuse a single configuration object for each distinct configuration rather than creating a new object each time you open a Realm.

    See more

    Declaration

    Objective-C

    @interface RLMRealmConfiguration : NSObject <NSCopying>

    Swift

    @_nonSendable(_assumed) class RLMRealmConfiguration : NSObject, NSCopying
  • RLMResults is an auto-updating container type in Realm returned from object queries. It represents the results of the query in the form of a collection of objects.

    RLMResults can be queried using the same predicates as RLMObject and RLMArray, and you can chain queries to further filter results.

    RLMResults always reflect the current state of the Realm on the current thread, including during write transactions on the current thread. The one exception to this is when using for...in fast enumeration, which will always enumerate over the objects which matched the query when the enumeration is begun, even if some of them are deleted or modified to be excluded by the filter during the enumeration.

    RLMResults are lazily evaluated the first time they are accessed; they only run queries when the result of the query is requested. This means that chaining several temporary RLMResults to sort and filter your data does not perform any extra work processing the intermediate state.

    Once the results have been evaluated or a notification block has been added, the results are eagerly kept up-to-date, with the work done to keep them up-to-date done on a background thread whenever possible.

    RLMResults cannot be directly instantiated.

    See more

    Declaration

    Objective-C

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

    Swift

    @_nonSendable(_assumed) class RLMResults<RLMObjectType> : NSObject, RLMCollection, NSFastEnumeration where RLMObjectType : AnyObject
  • RLMLinkingObjects is an auto-updating container type. It represents a collection of objects that link to its parent object.

    For more information, please see the “Inverse Relationships” section in the documentation.

    Declaration

    Objective-C

    @interface RLMLinkingObjects<RLMObjectType : RLMObject *> : RLMResults

    Swift

    @_nonSendable(_assumed) class RLMLinkingObjects<RLMObjectType> : RLMResults<AnyObject> where RLMObjectType : RLMObject
  • RLMSchema instances represent collections of model object schemas managed by a Realm.

    When using Realm, RLMSchema instances allow performing migrations and introspecting the database’s schema.

    Schemas map to collections of tables in the core database.

    See more

    Declaration

    Objective-C

    @interface RLMSchema : NSObject <NSCopying>

    Swift

    @_nonSendable(_assumed) class RLMSchema : NSObject, NSCopying, @unchecked Sendable
  • A RLMSectionedResultsChange object encapsulates information about changes to sectioned results that are reported by Realm notifications.

    RLMSectionedResultsChange is passed to the notification blocks registered with -addNotificationBlock on RLMSectionedResults, and reports what sections and rows in the collection changed since the last time the notification block was called.

    A complete example of updating a UITableView named tv:

    [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];
    

    All of the arrays in an RLMSectionedResultsChange are always sorted in ascending order.

    See more

    Declaration

    Objective-C

    @interface RLMSectionedResultsChange : NSObject

    Swift

    @_nonSendable(_assumed) class RLMSectionedResultsChange : NSObject
  • An RLMSection contains the objects which belong to a specified section key.

    See more

    Declaration

    Objective-C

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

    Swift

    @_nonSendable(_assumed) class RLMSection<RLMKeyType, RLMObjectType> : NSObject, RLMSectionedResult where RLMKeyType : RLMValue, RLMObjectType : AnyObject
  • A lazily evaluated collection that holds elements in sections determined by a section key.

    See more

    Declaration

    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
  • A collection datatype used for storing distinct objects.

    Note

    RLMSet supports storing primitive and RLMObject types. RLMSet does not support storing Embedded Realm Objects.
    See more

    Declaration

    Objective-C

    @interface RLMSet<RLMObjectType> : NSObject <RLMCollection>

    Swift

    @_nonSendable(_assumed) class RLMSet<RLMObjectType> : NSObject, RLMCollection where RLMObjectType : AnyObject
  • An object intended to be passed between threads containing a thread-safe reference to its thread-confined object.

    To resolve a thread-safe reference on a target Realm on a different thread, pass to -[RLMRealm resolveThreadSafeReference:].

    Warning

    A RLMThreadSafeReference object must be resolved at most once. Failing to resolve a RLMThreadSafeReference will result in the source version of the Realm being pinned until the reference is deallocated.

    Note

    Prefer short-lived RLMThreadSafeReferences as the data for the version of the source Realm will be retained until all references have been resolved or deallocated.

    See more

    Declaration

    Objective-C

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

    Swift

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