데이터 고정 - Flutter SDK
Atlas Device SDK는 더 이상 사용되지 않습니다. 자세한 내용은 지원 중단 페이지 를 참조하세요.
동결하면 동결 시점의 영역에 데이터의 변경 불가능한 스냅샷이 생성됩니다. 동결된 객체는 라이브 상태가 아니며 자동으로 업데이트되지 않습니다. 동결된 데이터에는 쓸 수 없습니다. 한 번 동결된 데이터는 동결을 해제할 수 없습니다.
다음 Realm 객체 유형을 고정할 수 있습니다.
Realm 동결
Realm 영역( ) 를 사용하여 전체 Realm의 동결 스냅샷 을 생성합니다. . 동결된 영역 작업을 마치면 메모리 누수를 방지하기 위해 닫아야 합니다.
final config = Configuration.local([Person.schema, Scooter.schema]); final realm = Realm(config); // Add scooter owned by Mace Windu final maceWindu = Person(ObjectId(), "Mace", "Windu"); final purpleScooter = Scooter(ObjectId(), "Purple scooter", owner: maceWindu); realm.write(() { realm.add(purpleScooter); }); // Create frozen snapshot of realm final frozenRealm = realm.freeze(); // Update data in the realm final quiGonJinn = Person(ObjectId(), "Qui-Gon", "Jinn"); realm.write(() { purpleScooter.owner = quiGonJinn; }); // Data changes not in the frozen snapshot final purpleScooterFrozen = frozenRealm.query<Scooter>("name == \$0", ["Purple scooter"]).first; print(purpleScooterFrozen.owner!.firstName); // prints 'Mace' // You must also close the frozen realm before exiting the process frozenRealm.close();
RealmResults 고정
RealmResults.freeze() 를 사용하여 RealmResults
의 동결된 스냅샷 을 생성합니다. . 고정된 데이터에 대한 작업을 마친 후에는 메모리 누수를 방지하기 위해 연결된 영역 을 닫아야 합니다.
// Add data to the realm final maceWindu = Person(ObjectId(), "Mace", "Windu"); final jocastaNu = Person(ObjectId(), "Jocasta", "Nu"); realm.write(() => realm.addAll([maceWindu, jocastaNu])); // Get RealmResults and freeze data final people = realm.all<Person>(); final frozenPeople = people.freeze(); // Update data in the non-frozen realm final newLastName = "Foo"; realm.write(() { for (var person in people) { person.lastName = newLastName; } }); // Data changes not in the frozen snapshot final frozenFooPeople = frozenPeople.query("lastName == \$0", [newLastName]); print(frozenFooPeople.length); // prints 0 // You must also close the frozen realm associated // with the frozen RealmResults before exiting the process frozenPeople.realm.close();
RealmObject 동결
RealmObject.freeze() 를 사용하여 의 동결된 스냅샷 을 RealmObject
생성합니다. . 고정된 데이터에 대한 작업을 마친 후에는 메모리 누수를 방지하기 위해 연결된 영역 을 닫아야 합니다.
final person = realm.query<Person>( 'firstName == \$0 AND lastName == \$1', ["Count", "Dooku"]).first; // Freeze RealmObject final frozenPerson = person.freeze(); // Change data in the unfrozen object. realm.write(() { realm.delete(person); }); // Frozen person snapshot still exists even though data deleted // in the unfrozen realm print(frozenPerson.isValid); // prints true print(person.isValid); // prints false // You must also close the frozen realm associated // with the frozen RealmObject before exiting the process frozenPerson.realm.close();
RealmObject에서 RealmList 고정
RealmList.freeze() 를 사용하여 에 RealmList
RealmObject
의 동결된 스냅샷 을 생성합니다. . 고정된 데이터에 대한 작업을 마친 후에는 메모리 누수를 방지하기 위해 연결된 영역 을 닫아야 합니다.
final firstPerson = realm.query<Person>("firstName = \$0", ["Yoda"]).first; // Freeze RealmList in a RealmObject final firstPersonAttributesFrozen = firstPerson.attributes.freeze(); // Change data in the unfrozen realm final newAttribute = "quick"; realm.write(() { // Append item to list firstPerson.attributes.add(newAttribute); }); final index = firstPersonAttributesFrozen.indexOf(newAttribute); print(index); // prints -1 because cannot find new attribute // You must also close the frozen realm associated // with the frozen RealmList before exiting the process firstPersonAttributesFrozen.realm.close();
데이터가 동결되었는지 확인
isFrozen
속성으로 동결 가능한 데이터 유형이 있는지 확인합니다. isFrozen
은 객체가 동결된 경우 true
를 반환하고 라이브 객체인 경우 false
을 반환합니다.
// You can check if all freezable types are frozen // with the `isFrozen` property. final realm = Realm(config); print(realm.isFrozen); final people = realm.all<Person>(); print(people.isFrozen); final firstPerson = realm.query<Person>("firstName = \$0", ["Yoda"]).first; print(firstPerson.isFrozen); final firstPersonAttributes = firstPerson.attributes; print(firstPersonAttributes.isFrozen);