Menu Docs

Página inicial do DocsDesenvolver aplicaçõesAtlas Device SDKs

CRUD - SDK rápido

Nesta página

  • Transações de gravação
  • Executar uma transação
  • Gravações orientadas por interface

O Realm usa um mecanismo de armazenamento altamente eficiente para persistir objetos. Você pode criar objetos em um realm, atualizar objetos em um realm e, eventualmente, excluir objetos de um realm. Como essas operações modificam o estado do realm, as chamamos de gravações.

O Realm lida com as operações de escrita como transações. Uma transação é um conjunto de operações de leitura e escrita que o Realm trata como uma única operação indivisível. Em outras palavras, uma transação é tudo ou nada: ou todas as suas operações na transação são bem-sucedidas ou nenhuma é efetivada.

Todas as operações de gravação devem ocorrer em uma transação.

Um domínio permite apenas uma transação aberta por vez. O realm bloqueia outras escritas em outras threads até que a transação aberta seja concluída. Consequentemente, não há condição de corrida ao ler valores do domínio dentro de uma transação.

Quando você termina a transação, o Realm ou a confirma ou a cancela :

  • Quando o Realm confirma uma transação, o Realm grava todas as alterações no disco. Para domínios sincronizados, o SDK classifica a alteração para sincronização com Atlas Device Sync.

  • Quando o domínio cancela uma transação de escrita ou uma operação na transação causa um erro, todas as alterações são descartadas (ou "revertidas").

O Swift SDK representa cada transação como uma função de chamada de resposta que contém zero ou mais operações de leitura e gravação. Para executar uma transação, defina uma chamada de resposta de transação e passe-o para o método write do Realm. Dentro desta chamada de resposta, você é livre para criar, ler, atualizar e excluir no Realm. Se o código na chamada de resposta lançar uma exceção quando o Realm o executar, o Realm cancelará a transação. Caso contrário, o Realm confirma a transação imediatamente após a chamada de resposta.

Importante

Preocupações com simultaneidade

Como as transações bloqueiam umas às outras, é melhor evitar abrir transações no thread da interface do usuário e em um thread em segundo plano. Se você estiver usando o Sync, evite abrir transações no thread da interface do usuário, pois o Realm processa sincronizações em um thread em segundo plano. Se uma transação em segundo plano bloquear a transação do seu thread da UI, seu aplicativo poderá parecer não responsivo.

Exemplo

O código a seguir mostra como executar uma transação com o método de escrita do domínio. Se o código na chamada de resposta lançar uma exceção, o Realm cancelará a transação. Caso contrário, o Realm confirma a transação.

O Realm sempre entrega notificações de forma assíncrona, para que nunca bloqueiem o thread da UI. No entanto, há situações em que a interface do usuário deve refletir as alterações instantaneamente. Se você atualizar a UI diretamente ao mesmo tempo em que escreve, a notificação eventual poderá duplicar essa atualização. Isso pode fazer com que seu aplicativo falhe devido ao estado inconsistente entre a UI e o armazenamento de dados de backup. Para evitar isso, você pode escrever sem enviar uma notificação para um manipulador específico. Chamamos esse tipo de transação de gravação orientada por interface.

Exemplo

Digamos que decidamos gerenciar manualmente a fonte de dados de uma visualização de tabela, porque o design do nosso aplicativo exige uma resposta instantânea às atualizações da tabela orientadas pela interface do usuário. Assim que um usuário adiciona um item à visualização da tabela, nós o inserimos em nossa fonte de dados, que grava no domínio, mas também inicia imediatamente a programação. No entanto, quando o Realm entrega a notificação de alteração para essa inserção um pouco mais tarde, isso indica que um objeto foi adicionado. Mas já atualizamos a visualização da tabela para ele! Em vez de escrever código complicado para lidar com esse caso, podemos usar gravações orientadas por interface para evitar que um manipulador de notificações específico seja acionado para essa gravação específica.

As gravações orientadas por interface, também conhecidas como gravações silenciosas, são especialmente úteis ao usar notificações de coleção refinadas com um domínio sincronizado . Enquanto você usa gravações orientadas por interface para as atualizações do usuário atual e atualiza a interface do usuário imediatamente, o processo de sincronização pode usar notificações padrão para atualizar a interface do usuário.

Dica

← Modelar dados com sincronização de dispositivo - SDK rápido