2016-11-22 2 views
1

이 질문은 기술적 인 문제가 아니라 오히려 접근법입니다. 데이터를 저장하는 등싱글 톤 대 코어 데이터

1)를 사용하여 관리자, 데이터 홀더 :

나는 앱에서 서버에서받은 데이터를 저장하기 위해이 더 많거나 적은 일반적인 접근 방법을 알고있다. 이들은 대개 일종의 싱글 톤이며 서버에서받은 모델을 저장하는 데 사용됩니다. (예 : 게시물/장소/사용자의 배열) 모든 화면에서 데이터에 액세스하려면 싱글 톤이 필요합니다. 나는 대부분의 앱이이 방법을 사용한다고 생각한다.

2) 코어 데이터 (또는 아마도 영역)를 메모리 내장 스토리지로 사용. 이 접근법은 싱글 톤 (singleton)을 피할 수는 있지만 유지 보수 및 지원을 위해서는 좀 더 복잡하고 위험합니다.

어떻게 데이터를 저장하고 그 이유는 무엇입니까?

P. 어떤 대답이 도움이 될 것입니다. 그러나 상세한 이유와 이유가있는 큰 "감사합니다".

답변

2

CoreData는 엄밀히 "메모리 내장"이 아닙니다. 객체를 데이터 모델에로드하고 컨텍스트에 저장 한 다음 실제로 디스크에 있거나 메인 메모리에서 꺼낼 수 있으며 가져 오기 요청을 통해 쉽게 가져올 수 있습니다.

싱글 톤은 일반적으로 사용자가 앱을 종료 할 때까지 항상 메인 메모리에 머물러 있습니다. 일부 데이터 구조 (예 : 실제로 필요한 모든 것이 미리보기 이미지 였을 때 전체 해상도 이미지)에 저장하는 더 큰 객체가있는 경우 이는 상당히 많은 리소스가 될 수 있습니다.

6

사람들이 Core Data/Relam/Shark 또는 다른 iOS ORM을 사용하는 이유는 주로 데이터를 응용 프로그램 실행 사이에 유지하기위한 것입니다.

현재이 두 가지 방법으로 단일 값과 아주 작은 (권장하지는 않습니다) 객체를 사용하여 UserDefaults을 사용하여 응용 프로그램을 시작할 때까지 계속 유지할 수 있습니다. 코어 데이터와 SharkORM의 경우 데이터베이스에 더 가까운 접근 방식의 경우 SQLite 위에 구축되므로 ORM을 사용해야합니다.

데이터 모델의 배열을 저장하는 관리자를 사용하면 앱 수명 기간 동안 만 해당 모델이 지속됩니다. 예를 들어 사용자가 강제로 앱을 종료하거나 기기를 다시 시작하거나 iOS가 앱을 종료 한 경우 상황에 따라 모든 데이터가 영구적으로 손실됩니다. 이는 디스크 자체의 데이터베이스가 아닌 휘발성 메모리 인 RAM에 저장되기 때문입니다.

특히 실행 사이에 지속성이 필요하지 않은 경우에도 데이터베이스 계층을 사용하면 장점을 얻을 수 있습니다. 예를 들어, SharkORM을 사용하면 내장 된 강력한 쿼리 작성기를 사용하지 않으려는 경우 개체에 원시 SQL 쿼리를 실행할 수 있습니다. 이것은 로컬 배열을 반복하지 않고 관심있는 모델을 빠르게 가져 오는 데 유용 할 수 있습니다.

질문에 대한 답변으로, I 데이터를 저장 하시겠습니까? 음, 나는이 세 가지 조합을 사용합니다. 예를 들어 내가 거기에 표시하고자하는 일부 데이터에 대한 API를 호출 한 다음 사용자에게 배열을 가진 관리자 인스턴스를 사용하여 데이터 모델을 보유한다고 가정 해 보겠습니다. 하지만 flipside에서 나중에 해당 데이터를 저장하고 싶거나 복잡한 쿼리를 실행해야한다면 Shark를 사용하여 디스크에 저장합니다. 그러나 사용자가 탑승 흐름을 보았는지 여부를 저장하고 싶다면 UserDefaults에 부울 값을 유지하면됩니다.

충분히 자세히 설명 드리겠습니다.

+0

고맙습니다. 내가 뭘 하려는지 나는 스스로 결정하기를 원한다. 싱글 톤을 피하기 위해서만 Core Data를 사용하고 싶습니까? 또는 코어 데이터 (또는 다른 orm)를 관리하는 데 너무 많은 노력이 필요할 수 있으므로 싱글 톤은 정상적으로 작동합니다. – Evgeniy

+1

싱글 톤의 사용을 둘러싼 논란이 있지만 여기에는 숙련 된 iOS 개발자로서의 제 의견이 있습니다. 싱글 톤은 훌륭하고 데이터 소스/관리자 역할을위한 최선의 솔루션입니다. 단 하나의 인스턴스 만 있으므로 멋지고 가벼우 며 데이터가 쉽게 액세스 할 수 있습니다. 메모리에서 싱글 톤을 유지하는 것보다 훨씬 리소스 집약적 인 작업을 수행 할 필요가없는 경우 디스크에서 데이터를 읽지 않아도되는 여분의 정밀 검사 (RAM보다 훨씬 느림)를 추가하면 안됩니다. 그러나 객체 배열을 완료하면 객체 배열을 비 웁니다. –

+0

제 경험은 정확히 반대입니다. 싱글 톤은 정의상 메모리 누수이며 게으른 프로그래머는 객체 수명에 대해 생각하지 않아도된다는 의미입니다. 전문적인 코드에는 허용되지 않습니다. 할당 취소 할 수없는 참조 카운트 루프를 도입하지 않고도 앱 델리게이트에서 객체에 대한 참조를 매달아 동일한 결과를 얻을 수 있습니다 – MoDJ