RLMRealm
Objective-C
@interface RLMRealm : NSObject
스위프트
@_nonSendable(_assumed) class RLMRealm : NSObject
RLMRealm
인스턴스('Realm'이라고도 함)는 Realm 데이터베이스를 나타냅니다.
Realm은 디스크( +[RLMRealm realmWithURL:]
참조) 또는 메모리( RLMRealmConfiguration
참조)에 저장할 수 있습니다.
RLMRealm
인스턴스는 내부 캐시되며, 이벤트 루프의 단일 반복 내에서 단일 스레드에서 동일한 경로나 식별자를 사용하여 동일한 RLMRealm
객체를 여러 번 구성하면 일반적으로 동일한 RLMRealm
객체가 반환됩니다.
특히 RLMRealm
인스턴스가 제거되었는지 확인하려면(예를 들어, Realm을 열고 일부 속성을 확인한 다음 Realm 파일을 삭제했다가 다시 열려면 Realm을 사용하는 코드를 배치합니다. @autoreleasepool {}
내에 넣고 이에 대한 다른 강력한 참조가 없는지 확인합니다.
경고
동결되지 않은RLMRealm
인스턴스는 스레드에 한정되어 있으며 스레드 또는 디스패치 대기열 전체에서 공유할 수 없습니다. 이 작업을 시도하면 예외가 발생합니다. Realm과 상호 작용하려는 각 스레드에서 이 메서드를 호출해야 합니다. 디스패치 대기열의 경우, 대기열이 동일한 스레드에서 모든 블록을 실행한다고 보장되지 않으므로, 이는 디스패치된 각 블록에서 이를 호출해야 함을 의미합니다.
-
기본 Realm의 인스턴스를 가져옵니다.
기본 Realm은
RLMRealm
매개 변수를 사용하지 않는RLMObject
클래스 메서드에서 사용되지만 그 외에는 특별하지 않습니다. 기본 Realm은 iOS에서는 애플리케이션의 문서 디렉토리, macOS에서는 애플리케이션의 Application Support 디렉토리, tvOS에서는 캐시 디렉토리 아래에 default.영역 으로 유지됩니다.기본 Realm은
RLMRealmConfiguration
을(를) 사용하여 생성되며,+[RLMRealmConfiguration setDefaultConfiguration:]
을(를) 통해 변경할 수 있습니다.선언
Objective-C
+ (nonnull instancetype)defaultRealm;
스위프트
class func `default`() -> Self
반환 값
현재 스레드의 기본
RLMRealm
인스턴스입니다. -
주어진 대기열에 바인딩된 기본 Realm의 인스턴스를 가져옵니다.
대기열 바인딩 RLMRealm은 열려 있는 스레드에 국한되지 않고 지정된 대기열에 한정됩니다. 대기열로의 블록 디스패치 내에 있는 한 모든 스레드에서 액세스할 수 있으며 알림은 스레드의 이벤트 루프 대신 대기열로 전달됩니다.
Realm은 직렬 대기열로만 제한할 수 있습니다. 대기열에 제한된 RLMRealm 인스턴스는 해당 대기열에 없을 때 얻을 수 있지만, 먼저 대기열로 전달하지 않고 해당 인스턴스로 무엇이든 수행하려고 하면 잘못된 스레드 예외가 발생합니다.
기본 Realm은
RLMRealmConfiguration
을(를) 사용하여 생성되며,+[RLMRealmConfiguration setDefaultConfiguration:]
을(를) 통해 변경할 수 있습니다.선언
Objective-C
+ (nonnull instancetype)defaultRealmForQueue:(nonnull dispatch_queue_t)queue;
스위프트
class func defaultRealm(for queue: dispatch_queue_t) -> Self
매개변수
queue
Realm을 제한할 직렬 디스패치 대기열입니다.
반환 값
지정된 대기열의 기본
RLMRealm
인스턴스입니다. -
지정된 구성으로
RLMRealm
인스턴스를 가져옵니다.선언
Objective-C
+ (nullable instancetype) realmWithConfiguration:(nonnull RLMRealmConfiguration *)configuration error:(NSError *_Nullable *_Nullable)error;
스위프트
convenience init(configuration: RLMRealmConfiguration) throws
매개변수
configuration
Realm을 만들 때 사용할 구성 객체입니다.
error
오류가 발생하면 반환 시 문제를 설명하는
NSError
객체가 포함됩니다. 가능한 오류에 관심이 없다면NULL
을 전달하세요.반환 값
RLMRealm
인스턴스입니다. -
지정된 대기열에 지정된 구성이 바인딩된
RLMRealm
인스턴스를 가져옵니다.대기열 바인딩 RLMRealm은 열려 있는 스레드에 국한되지 않고 지정된 대기열에 한정됩니다. 대기열로의 블록 디스패치 내에 있는 한 모든 스레드에서 액세스할 수 있으며 알림은 스레드의 이벤트 루프 대신 대기열로 전달됩니다.
Realm은 직렬 대기열로만 제한할 수 있습니다. 대기열에 제한된 RLMRealm 인스턴스는 해당 대기열에 없을 때 얻을 수 있지만, 먼저 대기열로 전달하지 않고 해당 인스턴스로 무엇이든 수행하려고 하면 잘못된 스레드 예외가 발생합니다.
선언
Objective-C
+ (nullable instancetype) realmWithConfiguration:(nonnull RLMRealmConfiguration *)configuration queue:(nullable dispatch_queue_t)queue error:(NSError *_Nullable *_Nullable)error;
스위프트
convenience init(configuration: RLMRealmConfiguration, queue: dispatch_queue_t?) throws
매개변수
configuration
Realm을 만들 때 사용할 구성 객체입니다.
queue
Realm을 제한할 직렬 디스패치 대기열입니다.
error
오류가 발생하면 반환 시 문제를 설명하는
NSError
객체가 포함됩니다. 가능한 오류에 관심이 없다면NULL
을 전달하세요.반환 값
RLMRealm
인스턴스입니다. -
지정된 파일 URL에 지속되는
RLMRealm
인스턴스를 가져옵니다.선언
Objective-C
+ (nonnull instancetype)realmWithURL:(nonnull NSURL *)fileURL;
스위프트
convenience init(url fileURL: URL)
매개변수
fileURL
Realm을 저장해야 하는 파일의 로컬 URL입니다.
반환 값
RLMRealm
인스턴스입니다. -
Realm을 비동기적으로 열고 지정된 대기열의 블록에 전달합니다.
Realm을 비동기적으로 열면 주어진 대기열로 전달하기 전에 백그라운드 스레드에서 Realm을 사용 가능한 상태로 만드는 데 필요한 모든 작업 (예: 시간이 오래 걸릴 가능성이 있는 마이그레이션 실행)을 백그라운드 스레드에서 수행합니다. 또한 동기화된 Realm은 작업이 다운로드되기 시작했을 때 사용 가능한 모든 원격 콘텐츠를 로컬에서 사용할 수 있을 때까지 기다립니다.
콜백 함수에 전달된 Realm은
-[RLMRealm realmWithConfiguration:queue:error]
이(가) 사용된 것처럼 콜백 대기열에 제한됩니다.선언
Objective-C
+ (nonnull RLMAsyncOpenTask *) asyncOpenWithConfiguration:(nonnull RLMRealmConfiguration *)configuration callbackQueue:(nonnull dispatch_queue_t)callbackQueue callback:(nonnull RLMAsyncOpenRealmCallback)callback;
스위프트
class func asyncOpen(with configuration: RLMRealmConfiguration, callbackQueue: dispatch_queue_t, callback: @escaping RLMAsyncOpenRealmCallback) -> RLMAsyncOpenTask
매개변수
configuration
Realm을 열 때 사용할 구성 객체입니다.
callbackQueue
콜백을 실행해야 하는 직렬 디스패치 대기열입니다.
callback
콜백 차단입니다. Realm이 성공적으로 열린 경우 인수로 전달됩니다. 그렇지 않으면 무엇이 잘못되었는지 설명하는
NSError
가 대신 블록에 전달됩니다. -
Realm이 현재 쓰기 트랜잭션(write transaction)에 참여하고 있는지 여부를 나타냅니다.
경고
단순히 이 속성을 확인한 다음 객체를 생성, 업데이트 또는 제거해야 할 때마다 쓰기 트랜잭션(write transaction)을 시작하지 마십시오. 이로 인해 많은 수의 쓰기 트랜잭션(write transaction)이 생성되어 성능이 저하될 수 있습니다. 대신 항상 단일 트랜잭션 중에 여러 업데이트를 수행하는 것을 선호합니다.선언
Objective-C
@property (nonatomic, readonly) BOOL inWriteTransaction;
스위프트
var inWriteTransaction: Bool { get }
-
이
RLMRealm
인스턴스를 만드는 데 사용된RLMRealmConfiguration
객체입니다.선언
Objective-C
@property (nonatomic, readonly) RLMRealmConfiguration *_Nonnull configuration;
스위프트
var configuration: RLMRealmConfiguration { get }
-
이 Realm에 객체가 포함되어 있는지 여부를 나타냅니다.
선언
Objective-C
@property (nonatomic, readonly) BOOL isEmpty;
스위프트
var isEmpty: Bool { get }
-
이 Realm이 동결되었는지 여부를 나타냅니다.
~를 참조하세요.
-[RLMRealm freeze]
선언
Objective-C
@property (nonatomic, readonly, getter=isFrozen) BOOL frozen;
스위프트
var isFrozen: Bool { get }
-
이 Realm의 동결(불변) 스냅샷을 반환합니다.
동결된 Realm은 Realm 데이터의 특정 버전에 대한 변경할 수 없는 스냅샷 보기입니다. 일반 RLMRealm 인스턴스와 달리 Realm에 작성된 쓰기를 반영하기 위해 실시간 업데이트되지 않으며 모든 스레드에서 액세스할 수 있습니다. 동결된 Realm에 쓰는 것은 허용되지 않으며 쓰기 트랜잭션(write transaction)을 시작하려고 하면 예외가 발생합니다.
동결된 Realm에서 읽은 모든 객체와 collection도 동결됩니다.
선언
Objective-C
- (nonnull RLMRealm *)freeze;
스위프트
func freeze() -> RLMRealm
-
이 Realm의 라이브 참고를 반환합니다.
반환된 Realm에서 읽은 모든 객체와 컬렉션은 더 이상 동결되지 않습니다. 이 메서드는 아직 동결되지 않은 경우
self
을(를) 반환합니다.선언
Objective-C
- (nonnull RLMRealm *)thaw;
스위프트
func thaw() -> RLMRealm
-
Realm의 압축되고 선택적으로 암호화된 사본을 지정된 로컬 URL에 씁니다.
대상 파일이 이미 존재할 수 없습니다.
쓰기 트랜잭션 (write transaction) 내에서 이 메서드를 호출하면 이전 쓰기 트랜잭션 (write transaction)이 커밋된 점의 데이터가 아닌 현재 데이터가 기록됩니다.
선언
Objective-C
- (BOOL)writeCopyToURL:(nonnull NSURL *)fileURL encryptionKey:(nullable NSData *)key error:(NSError *_Nullable *_Nullable)error;
스위프트
func writeCopy(to fileURL: URL, encryptionKey key: Data?) throws
매개변수
fileURL
Realm을 저장할 로컬 URL입니다.
key
새 파일을 암호화할 64바이트 암호화 키(선택 사항)입니다.
error
오류가 발생하면 반환 시 문제를 설명하는
NSError
객체가 포함됩니다. 가능한 오류에 관심이 없다면NULL
을 전달하세요.반환 값
YES
Realm이 디스크에 성공적으로 기록된 경우NO
(오류가 발생한 경우) -
지정된 구성에 의해 지정된 지정된 위치에 Realm의 복사본을 씁니다.
대상 파일이 이미 존재할 수 없습니다.
선언
Objective-C
- (BOOL)writeCopyForConfiguration:(nonnull RLMRealmConfiguration *)configuration error:(NSError *_Nullable *_Nullable)error;
스위프트
func writeCopy(for configuration: RLMRealmConfiguration) throws
매개변수
configuration
Realm 구성.
error
오류가 발생하면 반환 시 문제를 설명하는
NSError
객체가 포함됩니다. 가능한 오류에 관심이 없다면NULL
을 전달하세요.반환 값
YES
Realm이 디스크에 성공적으로 기록된 경우NO
(오류가 발생한 경우) -
지정된 구성에 대한 Realm 파일이 디스크에 로컬로 존재하는지 확인합니다.
동기화되지 않고 인메모리가 아닌 Realm의 경우
-[NSFileManager.defaultManager fileExistsAtPath:config.path]
에 해당합니다. 동기화된 Realm의 경우, Realm을 열 때 수행되는 것처럼 서버, 가상 경로, 사용자를 기반으로 디스크의 실제 경로를 계산하는 작업을 처리합니다.선언
Objective-C
+ (BOOL)fileExistsForConfiguration:(nonnull RLMRealmConfiguration *)config;
스위프트
class func fileExists(for config: RLMRealmConfiguration) -> Bool
매개변수
config
존재를 확인할 Realm 구성입니다.
반환 값
지정된 구성에 대한 Realm 파일이 디스크에 있으면 '예', 그렇지 않으면 '아니요'입니다.
-
지정된 구성에 대한 로컬 Realm 파일과 관련 임시 파일을 삭제합니다.
이렇게 하면 지정된 구성으로 Realm을 열 때 생성될 수 있는 '영역', '.note', '.management' 파일이 삭제됩니다. '잠금' 파일(영구 데이터가 포함되어 있지 않으며 Realm 파일을 열 때마다 처음부터 다시 생성됨)은 삭제하지 않습니다.
Realm은 현재 어떤 스레드나 다른 프로세스에서 열려 있지 않아야 합니다. 일치하는 경우 아니요를 반환하고 RLMErrorAlreadyOpen 오류를 보고합니다. 삭제가 진행되는 동안 다른 스레드에서 Realm을 열려고 하면 차단됩니다(새 Realm을 만들고 나중에 엽니다).
Realm이 아직 존재하지 않으면
NO
을 반환하고 오류 NSFileNoSuchFileError를 보고합니다.선언
Objective-C
+ (BOOL)deleteFilesForConfiguration:(nonnull RLMRealmConfiguration *)config error:(NSError *_Nullable *_Nullable)error;
스위프트
class func deleteFiles(for config: RLMRealmConfiguration) throws -> Bool
매개변수
config
삭제할 Realm을 식별하는 Realm 구성입니다.
반환 값
파일이 삭제된 경우 예, 그렇지 않으면 아니요.
-
이 Realm의 변경 사항에 대한 알림 핸들러를 추가하고 알림 토큰을 반환합니다.
알림 핸들러는 현재 스레드 또는 다른 스레드에서 각 쓰기 트랜잭션(write transaction)이 커밋된 후에 호출됩니다.
핸들러 블록은 추가된 동일한 스레드에서 호출되며 현재 이벤트 루프 내에 있는 스레드에만 추가할 수 있습니다. 백그라운드 스레드에서 이벤트 루프를 구체적으로 생성하고 실행하는 경우가 아니라면 일반적으로 메인 스레드만 사용합니다.
블록에는 다음과 같은 정의가 있습니다.
typedef void(^RLMNotificationBlock)(RLMNotification notification, RLMRealm *realm);
다음 매개변수를 수신합니다:
NSString
*알림: 수신 알림의 이름입니다. 전송되는 알림에 대한 자세한 내용은RLMRealmNotification
를 참조하세요.RLMRealm
*영역: 이 알림이 발생한 Realm입니다.
선언
Objective-C
- (nonnull RLMNotificationToken *)addNotificationBlock: (nonnull RLMNotificationBlock)block;
스위프트
func addNotificationBlock(_ block: @escaping RLMNotificationBlock) -> RLMNotificationToken
매개변수
block
Realm 알림을 처리하기 위해 호출되는 차단입니다.
반환 값
변경 알림을 계속 받기 위해 보존해야 하는 토큰 객체입니다.
-
Realm에서 쓰기 트랜잭션(write transaction)을 시작합니다.
각 Realm 파일에 대해 한 번에 하나의 쓰기 트랜잭션(write transaction)만 열 수 있습니다. 쓰기 트랜잭션(write transaction)은 중첩될 수 없으며 이미 쓰기 트랜잭션(write transaction) 중인 Realm에서 쓰기 트랜잭션(write transaction)을 시작하려고 하면 예외가 발생합니다. 다른 스레드나 다른 프로세스의 동일한 Realm 파일에 대한
RLMRealm
인스턴스에서beginWriteTransaction
을(를) 호출하면 현재 쓰기 트랜잭션(write transaction)이 완료되거나 취소될 때까지 차단됩니다.쓰기 트랜잭션(write transaction)을 시작하기 전에
beginWriteTransaction
은(는) 마치refresh
이(가) 호출된 것처럼RLMRealm
인스턴스를 최신 Realm 버전으로 업데이트하고 해당하는 경우 알림을 생성합니다. Realm이 이미 최신 상태인 경우에는 아무런 효과가 없습니다.쓰기 트랜잭션(write transaction)을 이벤트 루프의 여러 주기에 걸쳐 사용하는 것은 좋은 생각이 아니지만, 이렇게 하려면 쓰기 트랜잭션(write transaction)이 커밋될 때까지 쓰기 트랜잭션(write transaction)에 참여하는 Realm이 활성 상태로 유지되도록 해야 합니다.
선언
Objective-C
- (void)beginWriteTransaction;
스위프트
func beginWriteTransaction()
-
현재 쓰기 트랜잭션 (write transaction)의 모든 쓰기 작업을 커밋하고 트랜잭션을 종료합니다.
변경 사항을 저장하면 이 특정 인스턴스에 등록된 모든 알림
RLMRealm
차단이 동시에 호출됩니다. 다른 스레드나 collection에 등록된 알림 차단은 비동기적으로 호출됩니다. 이 쓰기 트랜잭션(write transaction)에 대한 특정 알림을 받지 않으려면commitWriteTransactionWithoutNotifying:error:
를 참조하세요.쓰기를 저장할 수 있는 디스크 공간이 충분하지 않거나 예기치 않은 I/O 오류로 인해 이 메서드가 실패할 수 있습니다. 이 버전의 메서드는 오류가 발생하면 예외를 발생시킵니다. 오류를 처리하려면
NSError
출력 매개변수가 있는 버전을 대신 사용하세요.경고
이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.선언
Objective-C
- (void)commitWriteTransaction;
-
현재 쓰기 트랜잭션 (write transaction)의 모든 쓰기 작업을 커밋하고 트랜잭션을 종료합니다.
변경 사항을 저장하면 이 특정 인스턴스에 등록된 모든 알림
RLMRealm
차단이 동시에 호출됩니다. 다른 스레드나 collection에 등록된 알림 차단은 비동기적으로 호출됩니다. 이 쓰기 트랜잭션(write transaction)에 대한 특정 알림을 받지 않으려면commitWriteTransactionWithoutNotifying:error:
를 참조하세요.쓰기를 저장할 수 있는 디스크 공간이 충분하지 않거나 예기치 않은 I/O 오류로 인해 이 메서드가 실패할 수 있습니다.
경고
이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.
선언
Objective-C
- (BOOL)commitWriteTransaction:(NSError *_Nullable *_Nullable)error;
스위프트
func commitWriteTransaction() throws
매개변수
error
오류가 발생하면 반환 시 문제를 설명하는
NSError
객체가 포함됩니다. 가능한 오류에 관심이 없다면NULL
을 전달하세요.반환 값
트랜잭션이 성공했는지 여부입니다.
-
변경 사항에 대한 특정 알림 블록에 알리지 않고 현재 쓰기 트랜잭션(write transaction)의 모든 쓰기 작업을 커밋합니다.
변경 사항을 저장하면 이 특정 인스턴스에 등록된 모든 알림
RLMRealm
차단이 동시에 호출됩니다. 다른 스레드나 collection에 등록된 알림 차단은 비동기적으로 호출되도록 예약됩니다.관련 알림 토큰을 전달하여 이 쓰기 트랜잭션(write transaction)의 변경 사항에 대한 특정 알림 차단 알림을 건너뛸 수 있습니다. 이는 쓰기 트랜잭션(write transaction)이 UI에서 이미 변경된 내용을 저장하고 알림 차단이 동일한 변경 사항을 다시 적용하려고 시도하지 않도록 하려는 경우에 주로 유용합니다.
이 메서드에 전달된 토큰은 이 특정
RLMRealm
인스턴스에 대한 알림을 위한 것이어야 합니다. 다른 스레드에 대한 알림은 이 메서드를 사용하여 건너뛸 수 없습니다.쓰기를 저장할 수 있는 디스크 공간이 충분하지 않거나 예기치 않은 I/O 오류로 인해 이 메서드가 실패할 수 있습니다.
경고
이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.
선언
Objective-C
- (BOOL)commitWriteTransactionWithoutNotifying: (nonnull NSArray<RLMNotificationToken *> *)tokens error:(NSError *_Nullable *_Nullable) error;
스위프트
func commitWriteTransactionWithoutNotifying(_ tokens: [RLMNotificationToken]) throws
매개변수
tokens
이 쓰기 트랜잭션(write transaction)의 변경 사항에 대한 알림을 받고 싶지 않은 콜백을 추가하여 반환된 알림 토큰의 배열입니다.
error
오류가 발생하면 반환 시 문제를 설명하는
NSError
객체가 포함됩니다. 가능한 오류에 관심이 없다면NULL
을 전달하세요.반환 값
트랜잭션이 성공했는지 여부입니다.
-
현재 쓰기 트랜잭션(write transaction) 중에 이루어진 모든 쓰기를 되돌리고 트랜잭션을 종료합니다.
이렇게 하면 Realm의 모든 객체가 쓰기 트랜잭션(write transaction)이 시작될 때의 상태로 롤백된 다음 트랜잭션이 종료됩니다.
이렇게 하면 삭제된 객체에 대한 데이터가 복원되지만 무효화된 인스턴스는 되돌릴 수 없습니다. Realm에 추가된 모든
RLMObject
는 관리되지 않는 대신 무효화됩니다. 다음 코드가 주어집니다.ObjectType *oldObject = [[ObjectType objectsWhere:@"..."] firstObject]; ObjectType *newObject = [[ObjectType alloc] init]; [realm beginWriteTransaction]; [realm addObject:newObject]; [realm deleteObject:oldObject]; [realm cancelWriteTransaction];
및 모두
oldObject
에newObject
대해 을YES
isInvalidated
반환하지만, 를 제공한 쿼리를oldObject
다시 실행하면 유효한 객체를 다시 한 번 반환합니다.트랜잭션 중에 수정된 모든 객체에 대한 KVO 관찰자는 초기값으로 다시 변경되었다는 알림을 받지만 취소된 쓰기 트랜잭션(write transaction)으로 인해 다른 알림은 생성되지 않습니다.
경고
이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.선언
Objective-C
- (void)cancelWriteTransaction;
스위프트
func cancelWriteTransaction()
-
쓰기 트랜잭션(write transaction) 내부의 지정된 블록에 포함된 작업을 수행합니다.
~를 참조하세요.
[RLMRealm transactionWithoutNotifying:block:error:]
선언
Objective-C
- (void)transactionWithBlock:(nonnull void (^)(void))block;
-
쓰기 트랜잭션(write transaction) 내부의 지정된 블록에 포함된 작업을 수행합니다.
~를 참조하세요.
[RLMRealm transactionWithoutNotifying:block:error:]
선언
Objective-C
- (BOOL)transactionWithBlock:(nonnull void (^)(void))block error:(NSError *_Nullable *_Nullable)error;
스위프트
func transaction(_ block: () -> Void) throws
-
쓰기 트랜잭션(write transaction) 내부의 지정된 블록에 포함된 작업을 수행합니다.
~를 참조하세요.
[RLMRealm transactionWithoutNotifying:block:error:]
선언
Objective-C
- (void)transactionWithoutNotifying: (nonnull NSArray<RLMNotificationToken *> *)tokens block:(nonnull void (^)(void))block;
스위프트
func transactionWithoutNotifying(_ tokens: [RLMNotificationToken], block: () -> Void)
-
쓰기 트랜잭션(write transaction) 내부의 지정된 블록에 포함된 작업을 수행합니다.
쓰기 트랜잭션(write transaction)은 중첩될 수 없으며 이미 쓰기 트랜잭션(write transaction)에 참여하고 있는 Realm에서 쓰기 트랜잭션(write transaction)을 실행하려고 하면 예외가 발생합니다.
transactionWithBlock:
RLMRealm
다른 스레드의 인스턴스에서 에 대한 호출은 현재 쓰기 트랜잭션 (write transaction)이 완료될 때까지 차단됩니다.쓰기 트랜잭션(write transaction)을 시작하기 전에
transactionWithBlock:
은(는) 마치refresh
이(가) 호출된 것처럼RLMRealm
인스턴스를 최신 Realm 버전으로 업데이트하고 해당하는 경우 알림을 생성합니다. Realm이 이미 최신 상태인 경우에는 아무런 효과가 없습니다.관련 알림 토큰을 전달하여 이 쓰기 트랜잭션(write transaction)의 변경 사항에 대한 특정 알림 차단 알림을 건너뛸 수 있습니다. 이는 쓰기 트랜잭션(write transaction)이 UI에서 이미 변경된 내용을 저장하고 알림 차단이 동일한 변경 사항을 다시 적용하려고 시도하지 않도록 하려는 경우에 주로 유용합니다.
이 메서드에 전달된 토큰은 이 특정
RLMRealm
인스턴스에 대한 알림을 위한 것이어야 합니다. 다른 스레드에 대한 알림은 이 메서드를 사용하여 건너뛸 수 없습니다.선언
Objective-C
- (BOOL)transactionWithoutNotifying: (nonnull NSArray<RLMNotificationToken *> *)tokens block:(nonnull void (^)(void))block error:(NSError *_Nullable *_Nullable)error;
스위프트
func transactionWithoutNotifying(_ tokens: [RLMNotificationToken], block: () -> Void, error: ()) throws
매개변수
tokens
이 쓰기 트랜잭션(write transaction)의 변경 사항에 대한 알림을 받고 싶지 않은 콜백을 추가하여 반환된 알림 토큰의 배열입니다.
block
수행할 작업이 포함된 블록입니다.
error
오류가 발생하면 반환 시 문제를 설명하는
NSError
객체가 포함됩니다. 가능한 오류에 관심이 없다면NULL
을 전달하세요.반환 값
트랜잭션이 성공했는지 여부입니다.
-
Realm이 현재 비동기 쓰기 작업을 수행하고 있는지 여부를 나타냅니다. 이는
beginAsyncWriteTransaction
,commitAsyncWriteTransaction
또는asyncTransactionWithBlock:
호출 후 '예'가 되며 예약된 모든 비동기 쓰기 작업이 완료될 때까지 유지됩니다.경고
YES
인 경우 Realm을 닫거나 무효화하면 예약된 작업이 완료될 때까지 차단됩니다.선언
Objective-C
@property (nonatomic, readonly) BOOL isPerformingAsynchronousWriteOperations;
스위프트
var isPerformingAsynchronousWriteOperations: Bool { get }
-
비동기 쓰기 트랜잭션(write transaction)을 시작합니다. 이 함수는 백그라운드 스레드에서 쓰기 트랜잭션(write transaction)을 비동기적으로 시작한 다음, 트랜잭션이 시작되면 원래 스레드 또는 대기열에서 차단을 호출합니다. 이는
beginWriteTransaction
와 달리 쓰기 트랜잭션(write transaction) 내에 다른 스레드가 있는 경우 호출 스레드를 차단하지 않으며 항상 즉시 반환됩니다. 이 함수(또는 비동기 쓰기 트랜잭션(write transaction)를 수행하는 다른 함수)를 여러 번 호출하면 호출될 블록이 대기 중인 순서와 동일한 순서로 대기열에 추가됩니다. 여기에는 동기 트랜잭션과 달리 허용되는 쓰기 트랜잭션(write transaction) 차단 내부에서 들어오는 호출이 포함됩니다.선언
Objective-C
- (RLMAsyncTransactionId)beginAsyncWriteTransaction: (nonnull void (^)(void))block;
스위프트
func beginAsyncWriteTransaction(_ block: @escaping () -> Void) -> RLMAsyncTransactionId
매개변수
block
쓰기 트랜잭션(write transaction) 내에서 수행할 작업이 포함된 블록입니다.
block
은commitAsyncWriteTransaction
,commitWriteTransaction
또는cancelWriteTransaction
을(를) 호출하여 끝나야 합니다. 이러한 호출 중 하나 없이 반환하는 것은cancelWriteTransaction
을 호출하는 것과 같습니다.반환 값
보류 중인 차단 호출을 취소하기 위해 차단이 호출되기 전에
cancelAsyncTransaction:
에 전달될 수 있는 비동기 트랜잭션을 식별하는 ID입니다. -
쓰기 트랜잭션(write transaction)을 비동기적으로 커밋합니다. 호출이 즉시 반환되어 전용 백그라운드 스레드에서 I/O가 수행되는 동안 호출자가 계속 진행할 수 있습니다. 쓰기 트랜잭션(write transaction)이
beginWriteTransaction
또는beginAsyncWriteTransaction
로 시작되었는지 여부에 관계없이 사용할 수 있습니다.선언
Objective-C
- (RLMAsyncTransactionId)commitAsyncWriteTransaction: (nullable void (^)(NSError *_Nullable)) completionBlock allowGrouping:(BOOL)allowGrouping;
스위프트
@_unsafeInheritExecutor func commitAsyncWriteTransaction(_ completionBlock: (((any Error)?) -> Void)?, allowGrouping: Bool) -> RLMAsyncTransactionId
매개변수
completionBlock
커밋이 완료되거나 오류로 인해 실패하면 소스 스레드 또는 대기열에서 호출되는 차단입니다.
allowGrouping
인 경우
YES
에 대한 여러 개의 순차적 호출을commitAsyncWriteTransaction:
함께 배치하여 한 그룹의 안정적인 저장소에 유지할 수 있습니다. 이렇게 하면 특히 배치되는 개별 트랜잭션이 작은 경우 쓰기 성능이 향상됩니다. 이벤트나 정전이 발생하면 커밋 호출이 반환되는 즉시 데이터가 유지된다는 일반적인 보장 대신, 그룹화된 모든 트랜잭션이 손실되거나 손실되지 않습니다.반환 값
보류 중인 차단 호출을 취소하기 위해 완료 차단이 호출되기 전에 비동기 트랜잭션 커밋을 식별하는 ID를
cancelAsyncTransaction:
에 전달할 수 있습니다. 그렇다고 커밋 자체가 취소되는 것은 아닙니다 . -
쓰기 트랜잭션(write transaction)을 비동기적으로 커밋합니다. 호출이 즉시 반환되어 전용 백그라운드 스레드에서 I/O가 수행되는 동안 호출자가 계속 진행할 수 있습니다. 쓰기 트랜잭션(write transaction)이
beginWriteTransaction
또는beginAsyncWriteTransaction
로 시작되었는지 여부에 관계없이 사용할 수 있습니다.선언
Objective-C
- (RLMAsyncTransactionId)commitAsyncWriteTransaction: (nonnull void (^)(NSError *_Nullable))completionBlock;
스위프트
func commitAsyncWriteTransaction(_ completionBlock: @escaping ((any Error)?) -> Void) -> RLMAsyncTransactionId
매개변수
completionBlock
커밋이 완료되거나 오류로 인해 실패하면 소스 스레드 또는 대기열에서 호출되는 차단입니다.
반환 값
보류 중인 차단 호출을 취소하기 위해 완료 차단이 호출되기 전에 비동기 트랜잭션 커밋을 식별하는 ID를
cancelAsyncTransaction:
에 전달할 수 있습니다. 그렇다고 커밋 자체가 취소되는 것은 아닙니다 . -
쓰기 트랜잭션(write transaction)을 비동기적으로 커밋합니다. 호출이 즉시 반환되어 전용 백그라운드 스레드에서 I/O가 수행되는 동안 호출자가 계속 진행할 수 있습니다. 쓰기 트랜잭션(write transaction)이
beginWriteTransaction
또는beginAsyncWriteTransaction
로 시작되었는지 여부에 관계없이 사용할 수 있습니다.선언
Objective-C
- (RLMAsyncTransactionId)commitAsyncWriteTransaction;
스위프트
func commitAsyncWriteTransaction() -> RLMAsyncTransactionId
반환 값
보류 중인 차단 호출을 취소하기 위해 완료 차단이 호출되기 전에 비동기 트랜잭션 커밋을 식별하는 ID를
cancelAsyncTransaction:
에 전달할 수 있습니다. 그렇다고 커밋 자체가 취소되는 것은 아닙니다 . -
비동기 트랜잭션을 위해 대기 중인 차단을 취소합니다. 이렇게 하면 비동기 시작 또는 비동기 커밋으로 전달된 차단을 취소할 수 있습니다. 시작을 취소하면 해당 트랜잭션이 완전히 취소되고, 커밋을 취소하면 완료 콜백 호출이 취소될 뿐이며 커밋은 계속 발생합니다. 트랜잭션은 차단이 호출되기 전에만 취소할 수 있으며 차단 내에서
cancelAsyncTransaction:
를 호출하는 것은 작동하지 않습니다.선언
Objective-C
- (void)cancelAsyncTransaction:(RLMAsyncTransactionId)asyncTransactionId;
스위프트
func cancelAsyncTransaction(_ asyncTransactionId: RLMAsyncTransactionId)
매개변수
asyncTransactionId
beginAsyncWriteTransaction:
또는commitAsyncWriteTransaction:
의 트랜잭션 ID입니다. -
쓰기 트랜잭션(write transaction) 내부의 지정된 블록에 포함된 조치를 비동기적으로 수행합니다. 쓰기 트랜잭션(write transaction)은
beginAsyncWriteTransaction:
을(를) 호출하는 것처럼 비동기적으로 시작되며, 기본적으로 차단이 완료된 후 비동기적으로 커밋됩니다. 블록 내에서commitWriteTransaction
또는cancelWriteTransaction
를 명시적으로 호출하여 쓰기 트랜잭션(write transaction)을 동기적으로 커밋하거나 취소할 수도 있습니다.선언
Objective-C
- (RLMAsyncTransactionId) asyncTransactionWithBlock:(nonnull void (^)(void))block onComplete: (nullable void (^)(NSError *_Nonnull))completionBlock;
스위프트
func asyncTransaction(_ block: @escaping () -> Void, onComplete completionBlock: ((any Error) -> Void)? = nil) -> RLMAsyncTransactionId
매개변수
block
수행할 작업이 포함된 블록입니다.
completionBlock
커밋이 완료되거나 오류로 인해 실패하면 소스 스레드 또는 대기열에서 호출되는 차단입니다.
반환 값
보류 중인 차단 호출을 취소하기 위해 차단이 호출되기 전에
cancelAsyncTransaction:
에 전달될 수 있는 비동기 트랜잭션을 식별하는 ID입니다. -
쓰기 트랜잭션(write transaction) 내부의 지정된 블록에 포함된 조치를 비동기적으로 수행합니다. 쓰기 트랜잭션(write transaction)은
beginAsyncWriteTransaction:
을(를) 호출하는 것처럼 비동기적으로 시작되며, 기본적으로 차단이 완료된 후 비동기적으로 커밋됩니다. 블록 내에서commitWriteTransaction
또는cancelWriteTransaction
를 명시적으로 호출하여 쓰기 트랜잭션(write transaction)을 동기적으로 커밋하거나 취소할 수도 있습니다.선언
Objective-C
- (RLMAsyncTransactionId)asyncTransactionWithBlock: (nonnull void (^)(void))block;
스위프트
func asyncTransaction(_ block: @escaping () -> Void) -> RLMAsyncTransactionId
매개변수
block
수행할 작업이 포함된 블록입니다.
반환 값
보류 중인 차단 호출을 취소하기 위해 차단이 호출되기 전에
cancelAsyncTransaction:
에 전달될 수 있는 비동기 트랜잭션을 식별하는 ID입니다. -
가장 최근 데이터를 점으로 Realm과 Realm에서 managed 객체를 업데이트합니다.
Realm의 버전이 실제로 변경되면 변경 사항을 반영하기 위해 Realm 및 collection 알림이 전송됩니다. collection 알림은 백그라운드 스레드에서 준비되므로 시간이 걸릴 수 있습니다. 따라서 메인 스레드에서 이 메서드를 호출하는 것은 권장되지 않습니다.
선언
Objective-C
- (BOOL)refresh;
스위프트
func refresh() -> Bool
반환 값
Realm에 대한 업데이트가 있는지 여부. 실제로 변경된 데이터가 없더라도
YES
가 반환될 수 있습니다. -
다른 스레드에 변경 사항이 발생할 때 이 Realm을 자동으로 업데이트하려면 이 속성을
YES
로 설정합니다.YES
(기본값)으로 설정하면 변경 사항이 커밋된 후 이벤트 루프의 다음 주기에서 다른 스레드에서 변경된 내용이 이 Realm에 반영됩니다.NO
로 설정된 경우 Realm에서-refresh
를 수동으로 호출하여 최신 데이터를 가져오도록 업데이트해야 합니다.기본적으로 백그라운드 스레드에는 활성 런 루프가 없으며
autorefresh
가YES
로 설정되어 있더라도 최신 버전으로 업데이트하려면-refresh
를 수동으로 호출해야 합니다.이 속성이 활성화된 경우에도 자동 새로 고침이 발생하기 전에 언제든지
-refresh
를 호출하여 Realm을 업데이트할 수 있습니다.쓰기 트랜잭션(write transaction)은 여전히 Realm을 항상 최신 버전으로 업그레이드하고 자동 새로 고침이 비활성화되어 있더라도 커밋 시 로컬 알림을 생성합니다.
Realm에 대한 강력한 참조 없이 Realm에서
autorefresh
을 비활성화해도 아무런 효과가 없으며autorefresh
는 다음에 Realm이 생성될 때YES
로 되돌아갑니다. 이는 새로 고칠 것이 없음을 의미하므로 일반적으로 관련이 없지만(managedRLMObject
,RLMArray
및RLMResults
는 이를 managed Realm에 대한 참고를 가지고 있음),RLMRealm.defaultRealm.autorefresh = NO
설정은 다음과 같습니다.application:didFinishLaunchingWithOptions:
이상만 managed Realm 객체 저장이 작동하지 않습니다.기본값은
YES
입니다.선언
Objective-C
@property (nonatomic) BOOL autorefresh;
스위프트
var autorefresh: Bool { get set }
-
Realm에서 모든
RLMObject
,RLMResults
,RLMLinkingObjects
및RLMArray
를 managed합니다.Realm은 자신이 액세스하는 데이터 버전에 대한 읽기 잠금을 보유하므로 다른 스레드에서 Realm을 변경해도 이 Realm에 표시되는 데이터가 수정되거나 삭제되지 않습니다. 이 메서드를 호출하면 읽기 잠금 (read lock)이 해제되어 파일을 늘리는 대신 디스크에 사용된 공간을 나중에 쓰기 트랜잭션 (write transaction)에서 재사용할 수 있습니다. 이 메서드는 더 이상 필요하지 않은 Realm에서 이전에 데이터를 읽은 백그라운드 스레드에서 긴 차단 작업을 수행하기 전에 호출해야 합니다.
현재 스레드의 이
RLMRealm
인스턴스에서 얻은 모든RLMObject
,RLMResults
및RLMArray
인스턴스가 무효화됩니다.RLMObject
및RLMArray
는 사용할 수 없습니다.RLMResults
이 비어 있게 됩니다. Realm 자체는 유효한 상태로 유지되며 다음에 Realm에서 데이터를 읽을 때 새 읽기 트랜잭션(read transaction)이 암시적으로 시작됩니다.Realm에서 데이터를 읽지 않거나 Realm에서 데이터를 읽기 전에 이 메서드를 연속으로 여러 번 호출하는 것은 작동하지 않습니다.
선언
Objective-C
- (void)invalidate;
스위프트
func invalidate()
-
RLMThreadSafeReference
가 처음 생성될 때 참고된 객체와 동일한 객체를 반환하지만 이 스레드의 현재 Realm에 대해 확인됩니다. 참고가 생성된 후 이 객체가 삭제된 경우nil
을(를) 반환합니다.경고
RLMThreadSafeReference
객체는 최대 한 번만 해석되어야 합니다.RLMThreadSafeReference
확인에 실패하면 참고 할당이 해제될 때까지 Realm의 소스 버전이 고정됩니다. 참고가 두 번 이상 확인되면 예외가 발생합니다.경고
쓰기 트랜잭션(write transaction) 내에서는 호출할 수 없습니다.
참고
소스 Realm이 이 버전보다 이후 버전인 경우 이 Realm을 새로 고칩니다.
선언
Objective-C
- (nullable id)resolveThreadSafeReference: (nonnull RLMThreadSafeReference *)reference;
매개변수
reference
이 Realm에서 확인할 스레드에 한정된 객체에 대한 스레드 세이프 참고입니다.
-
Realm에 객체를 추가합니다.
이 객체가 추가되면, 이 객체는 Realm에서 managed로 간주됩니다.
RLMRealm
및RLMObject
의 서브클래스에서objectsWhere:
선택기를 사용하여 검색할 수 있습니다.추가되면 이 객체가 참고하는 모든 관계가 아직 Realm에 포함되어 있지 않은 경우 Realm에 추가됩니다.
객체 또는 관련 객체가 이미 다른 Realm에서 managed 경우 예외가 발생합니다. managed 객체의 복사본을 다른 Realm에 삽입하려면
-[RLMObject createInRealm:withObject:]
을(를) 사용합니다.추가할 객체는 유효해야 하며 이전에 Realm에서 삭제된 적이 없어야 합니다(예:
isInvalidated
은 이어야NO
합니다).경고
이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.
매개변수
object
이 Realm에 추가할 객체입니다.
-
컬렉션의 모든 객체를 Realm에 추가합니다.
이는 collection의 모든 객체에 대해
addObject:
을(를) 호출하는 것과 동일합니다.경고
이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.
~를 참조하세요.
addObject:
선언
Objective-C
- (void)addObjects:(nonnull id<NSFastEnumeration>)objects;
스위프트
func addObjects(_ objects: any NSFastEnumeration)
매개변수
objects
열거 가능한 collection(예:
NSArray
,RLMArray
또는RLMResults
)으로, Realm에 추가할 Realm 객체를 포함합니다. -
기존 객체를 Realm에 추가하거나 업데이트합니다.
제공된 객체에는 지정된 기본 키가 있어야 합니다. Realm에 동일한 기본 키 값을 가진 객체가 없으면 객체가 삽입됩니다. 그렇지 않으면 기존 객체가 변경된 값으로 업데이트됩니다.
addObject:
과 마찬가지로 객체를 다른 Realm에서 이미 managed 할 수 없습니다.-[RLMObject createOrUpdateInRealm:withValue:]
을(를) 사용하여 다른 Realm에 값을 복사합니다.object
에 값이 nil인 속성 또는 KVC 값이 있고 해당 값이 업데이트 중인 기존 객체의 null 허용 속성에 해당하는 경우, 해당 null 허용 속성은 nil로 설정됩니다.경고
이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.
선언
Objective-C
- (void)addOrUpdateObject:(nonnull RLMObject *)object;
스위프트
func addOrUpdate(_ object: RLMObject)
매개변수
object
추가하거나 업데이트할 객체입니다.
-
컬렉션의 모든 객체를 Realm에 추가하거나 업데이트합니다.
이는 collection의 모든 객체에 대해
addOrUpdateObject:
을(를) 호출하는 것과 동일합니다.경고
이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.
~를 참조하세요.
addOrUpdateObject:
선언
Objective-C
- (void)addOrUpdateObjects:(nonnull id<NSFastEnumeration>)objects;
스위프트
func addOrUpdateObjects(_ objects: any NSFastEnumeration)
매개변수
objects
열거 가능한 collection(예:
NSArray
,RLMArray
또는RLMResults
)으로, Realm 내에서 추가되거나 업데이트될 Realm 객체가 포함되어 있습니다. -
Realm에서 하나 이상의 객체를 삭제합니다.
이는 collection의 모든 객체에 대해
deleteObject:
을(를) 호출하는 것과 동일합니다.경고
이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.
~를 참조하세요.
deleteObject:
선언
Objective-C
- (void)deleteObjects:(nonnull id<NSFastEnumeration>)objects;
스위프트
func deleteObjects(_ objects: any NSFastEnumeration)
매개변수
objects
Realm에서 삭제할 객체가 포함된
NSArray
,RLMArray
또는RLMResults
와 같은 열거 가능한 collection입니다. -
Realm에서 모든 객체를 삭제합니다.
경고
이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.
~를 참조하세요.
deleteObject:
선언
Objective-C
- (void)deleteAllObjects;
스위프트
func deleteAllObjects()
-
주어진 로컬 URL에 있는 Realm의 스키마 버전을 반환합니다.
선언
Objective-C
+ (uint64_t)schemaVersionAtURL:(nonnull NSURL *)fileURL encryptionKey:(nullable NSData *)key error:(NSError *_Nullable *_Nullable)error;
매개변수
fileURL
Realm 파일의 로컬 URL입니다.
key
파일 암호화에 사용되는 64바이트 키를 사용하거나 암호화되지 않은 경우
nil
을(를) 사용합니다.error
오류가 발생하면 반환 시 문제를 설명하는
NSError
객체가 포함됩니다. 가능한 오류에 관심이 없다면NULL
을 전달하세요.반환 값
버전을 읽을 수 없는 경우
fileURL
또는RLMNotVersioned
에 있는 Realm의 버전입니다. -
지정된 경로의 Realm에서 지정된 Realm 구성의 마이그레이션 블록을 수행합니다.
이 메서드는 Realm을 처음 열 때 자동으로 호출되며 명시적으로 호출할 필요가 없습니다. 이 메서드를 호출하도록 선택하여 마이그레이션이 수행되는 정확한 시기와 방법을 제어할 수 있습니다.
~를 참조하세요.
RLM 마이그레이션
선언
Objective-C
+ (BOOL)performMigrationForConfiguration: (nonnull RLMRealmConfiguration *)configuration error:(NSError *_Nullable *_Nullable)error;
스위프트
class func performMigration(for configuration: RLMRealmConfiguration) throws
매개변수
configuration
Realm을 열고 마이그레이션하는 데 사용되는 Realm 구성입니다.
반환 값
마이그레이션을 적용하는 동안 발생한 오류입니다(있는 경우).
-
사용할 수 없음
+defaultRealm, +realmWithConfiguration: 또는 +realmWithURL:을 사용하세요.
RLMRealm 인스턴스는 Realm에서 내부적으로 캐시하며 직접 생성할 수 없습니다.
+[RLMRealm defaultRealm]
,+[RLMRealm realmWithConfiguration:error:]
또는+[RLMRealm realmWithURL]
를 사용하여 RLMRealm에 대한 참조를 가져옵니다.선언
Objective-C
- (nonnull instancetype)init;
-
사용할 수 없음
+defaultRealm, +realmWithConfiguration: 또는 +realmWithURL:을 사용하세요.
RLMRealm 인스턴스는 Realm에서 내부적으로 캐시하며 직접 생성할 수 없습니다.
+[RLMRealm defaultRealm]
,+[RLMRealm realmWithConfiguration:error:]
또는+[RLMRealm realmWithURL]
를 사용하여 RLMRealm에 대한 참조를 가져옵니다.선언
Objective-C
+ (nonnull instancetype)new;