Programing

적절한 Realm 사용 패턴 / 모범 사례?

lottogame 2020. 10. 25. 11:27
반응형

적절한 Realm 사용 패턴 / 모범 사례?


Realm을 사용하기 위해 프로젝트를 변환하는 중입니다. 우리는 특히 Realm 브라우저 (너무 편리합니다!)에 정말 감명 받았습니다.

결과적으로 몇 가지 질문이 나 왔으며 더 진행하기 전에 구체적인 사용 패턴을 낮추고 자합니다. 우리 앱은 다중 스레드 (API 호출, 애니메이션 등)가 많기 때문에 (현재) 스레드간에 Realm 인스턴스에 액세스 할 수 없다는 것을 알고 있으므로 질문을 읽을 때 염두에 두십시오.

  • Realm 인스턴스를 반복적으로 생성하는 것에 대해 얼마나 걱정해야합니까? 오버 헤드는 무엇입니까?
  • 반복 사용을 위해 ViewController 또는 Singletons에 Realm 인스턴스를 유지해야합니까? 우리는 이것을 시도했지만 때때로 다른 스레드에서 인스턴스에 액세스하기 때문에 매번 새 인스턴스를 만드는 것으로 되돌려 야했습니다.
  • Realm 인스턴스의 관계 속성에 접근 할 때 읽은 결과 데이터가 메모리에 유지 되나요, 아니면 매번 디스크에서 읽나요? 깊은 관계 액세스로 인해 보유 된 Realm 인스턴스가 너무 커지는 것에 대해 걱정해야합니까?
  • Realm 인스턴스 새로 고침은 언제 필요합니까? Realm 브라우저에서 변경하면 새로 고침을 호출하지 않고 유지 된 Realm에 반영됩니다.
    • 설명서에 따라 각 영역에 자동 새로 고침 속성이있는 것 같습니다.
  • 나쁜 습관으로 realm재산에 접근하고 Object있습니까? 객체를 사용하는 함수가 객체 또는 Realm (물론 동일한 스레드에서)을 생성하지 않은 경우 Realm에 쓰기 위해 이것을 사용했습니다.

예를 들면 ...

func saveStuff(thingToUpdate: Object?) {
   if let thingToUpdate = thingToUpdate, let realm = thingToUpdate.realm {
       realm.write {
           thingToUpdate.name = "lionpants"
       }
   }    
}

미리 감사드립니다. 귀하의 답변을 기다리겠습니다. :디


(부인 성명: Realm에서 일합니다.이제 Realm을 떠났지만 여전히 기꺼이 도와 드리겠습니다!) :) 감사합니다! Realm을 즐기고 있다는 소식을 들으니 반갑습니다!

여러 Realm 인스턴스 -이것에 대해 전혀 걱정할 필요가 없습니다! Realm 파일 객체는 각 스레드에서 처음 인스턴스화 할 때 생성되며 이후에 매번 시도하고 인스턴스화 할 때마다 동일한 객체가 반환됩니다.

Realm 인스턴스 유지 -첫 번째 요점부터 계속해서 다른 객체 내부에서 Realm 참조에 매달리는 것에 대해 걱정할 필요가 없습니다. Realm이 내부적으로 Realm 파일 객체를 추적하고 동일한 객체를 반환하므로 그렇게하지 않아도 불이익을받지 않습니다. 즉, 객체 내부에 Realm 객체를 영구적으로 참조하는 것이 코드 복잡성을 단순화한다면 계속 사용해도됩니다.

Realm 관계 속성에 접근하기 -엄밀히 말하면 Realm 파일의 데이터는 디스크에서 복사되지 않습니다 (일반적인 ORM처럼). 또한 메모리 매핑을 사용하여 디스크의 데이터를 메모리 내 속성으로 직접 참조합니다. 따라서 Realm 파일이 메모리에서 너무 커지는 것에 대해 걱정할 필요가 없습니다.

자동 새로 고침 자동 새로 고침은 기본 스레드의 Realm 파일 객체에 대해서만 기본적으로 활성화됩니다. 다른 스레드의 Realm 파일 객체에 대해 수동으로 활성화해야하며, 대신 refresh메서드 호출을 사용하여 수동으로 새로 고치도록 선택할 수 있습니다 .

편집 : 나는 정정 당했다! 여러 스레드에있는 모든 Realm 파일 객체는 autorefresh기본적으로 on이 있습니다. autorefresh이 켜져 있을 때 호출해야하는 유일한 시간 refresh은 실행 루프의 현재 반복이 완료되기 전에 Realm 파일의 변경 사항을 다른 참조에 반영해야하는 경우입니다.

객체의 Realm 참조 참조 절대 아닙니다. 나쁜 습관은 아닙니다! 저는 Realm을 사용하여 적절한 컨텍스트를 제공하는 개인 앱에서이 작업을 수행하는 것을 선호합니다. 이는 항상 더 쉽고 코드에서 객체와 부모 Realm 파일 사이에 더 강력한 시각적 컨텍스트를 제공하기 때문입니다. (Haha yep, 여기에 스레딩 문제가 있었다면 아마도write지점에 도달하기 전에 그것을 발견했을 것입니다).


도움이 되었기를 바랍니다. 여기에 대한 설명이 필요하면 알려주세요!

참고 URL : https://stackoverflow.com/questions/31590717/proper-realm-usage-patterns-best-practices

반응형