2017-04-06 1 views
1

그래서 사용자가 사진을 찍어서 정보를 추가하고 데이터베이스에 업로드하는 프로세스가 있습니다. 내 질문은 모든 컨트롤러를 통해 액세스 할 수 있도록 데이터를 저장해야하는 방법이며 업로드 단추를 클릭하면 최종 개체가 서버에 보내져 데이터베이스에 추가됩니다. 핵심 데이터를 사용합니까? 아니면 구조체처럼? 나는 이것을 제대로하고 있는지 확인하고 싶다.코어 데이터를 사용합니까?

답변

5

이것은 의견 중심의 대답이며 개발자의 친숙 함/편안함과 다양한 기본 개념의 영향을받습니다. 그러므로 나는 여기에 대한 대답으로 그것을 생각하지 않지만 내 의견입니다.

모든 코어 컨트롤러를 통해 액세스 할 수 있도록 코어 데이터를 사용해야합니까?

절대적으로 없습니다! U는 여러 개의 ViewController에서 동시에 사용되는 공유 데이터 소스를 생성하기 위해 핵심 데이터가 필요하지 않습니다. 분명히 Singleton 데이터 소스 객체를 생성 할 수 있으며 모든 VC에서 액세스 할 수 있습니다.

하지만 핵심 데이터는 공유 된 데이터 소스가 아닙니다.

코어 데이터는 구조체가 아닌 영구 데이터 저장소입니다.

사용자가 사진을 찍고 업로드하기 전에 앱을 종료하거나 사용자가 인터넷없이 사진을 찍어 업로드 대기열로 보내고 인터넷이 앱을 다시 방문 할 때마다 오프라인 기능을 제공한다고 가정합니다 구조체를 사용하고 메모리에 데이터 소스를 유지하는 경우 서버에로드합니다. 사용자가 응용 프로그램을 종료하면 사용자가 수행하는 모든 노력이 낭비되고 분명히 사용자는 감사하지 않을 것입니다. 다른 한편으로 당신이 분명히 sqlite 파일에서 그것을 가질 수있는 핵심 데이터를 사용하는 경우 사용자가 그 사이에 애플 리케이션을 종료해도 필요하면 언제든지 액세스 할 수 있습니다 :)

관리 객체 컨텍스트는 performBlock 및 performBlockAndWait를 제공합니다 다중 스레드 환경에서 코어 데이터에 액세스하지만 구조체 U의 일반 배열을 사용하면 UR 자신이 작성해야합니다.

이제 바퀴를 재발 명할 필요가 없습니다. 우리는 모두 배열과 같은 데이터 유형은 스레드로부터 안전하지는 않습니다.) 그래서 managedObject Context가 있지만 iOS 5의 managedObject 컨텍스트는 performBlock 및 performBlockAndWait와 같은 놀라운 편리한 메소드를 제공하여 멀티의 공유 데이터 소스 (managedObject)를 처리 할 때 개발자의 생활을 용이하게합니다. 스레드 환경.

관리 개체 컨텍스트는 실시간으로 일어나는 변경 사항에 대한 알림을 제공하고 NSFetchedResultsController가 constatly 나는 그에게 큰 일을 생각 해달라고 데이터 소스를

을 모니터링하고 업데이트 할 수있는 메커니즘을 제공과 함께 마법처럼 작동하지만에 배열로 같은 일을 이루기 위해서는 KVO를 사용해야합니다. 그러나 KVO는 신속한 객체로 작업하지 않으므로 didSet 메소드를 오버라이드해야하고 데이터 소스가 변경 될 때 수동으로 모든 VC에 통지해야합니다. 유 다루고있는 레코드 수이

마지막으로, 또한 중요한 : 안 우아한 해결책은 :

확장 성 및 안정성이 아니다. 나는 사용자 장치에서 /에서 수천 개의 이미지를 업로드하고 복원하는 회사의 일원이었습니다. 배열을 유지 보수하는 1000 개의 이미지를 다루는 시나리오에서는 전체 배열이 항상로드되기 때문에 항상 고통스럽고 메모리 인쇄 비용이 많이 든다.반면에 NSFetchedResultsController은 페이지 오류 메커니즘에서 작동합니다. 필요한 때에 만 효율적으로 데이터를로드합니다.

확장 성은 관리 객체 엔티티에 새로운 필드를 추가하는 것일뿐입니다. 견고성은 내가 믿는 핵심 데이터를 다루는 스킬 세트와 직접적으로 비례합니다. 조언의

핀치 :

유 구조체 또는 코어 데이터의 배열을 사용하는지 여부에 상관없이, 항상 로컬 파일 시스템에 이미지를 저장하고 데이터 소스의 로컬 경로 상대 참조를 유지한다. 전체 이미지를 메모리에 보유하는 것은 아주 나쁜 생각입니다. D

희망이 있습니다.

관련 문제