2012-08-17 7 views
0

사용자가 스테이지에 입력 한 모든 데이터를 사용자가 "저장"하는 최종 스테이지 전에 서로 다른보기 컨트롤러가있는 응용 프로그램이 있습니다. 데이터 입력 단계에서 사용자는 돌아가서 일부 데이터를 변경할 수 있습니다. 그러나 그들은 많은 메모리를 소비하기 때문에 일부 데이터 구조를 공개하려고합니다. 장치가 메모리가 부족할 때만 호출되기 때문에 나는 viewdidunload 동안 그것을 놓을 수 없습니다. 나는 또한 viewDidDisappear에서 데이터를 공개 할 수 없습니다. 사용자가 돌아가서 물건을 바꾸고 싶다면 데이터가 없기 때문입니다.iOS :보기 컨트롤러 언로드 및 팝업

나는 이것을 수행하는 방법이 이전 viewcontroller에 viewcontrollers의 포인터를 설정 한 다음 이전 viewcontroller에 대한 포인터에 릴리스 기능을 호출하여 항목을 릴리스하는 것이라고 생각합니다.

어떻게하면됩니까?

나는 내가 .h 파일에

#import "SomeViewController.h" 

@property SomeViewController someViewController; 

같은 것을 넣어 생각? 나는 여기서 어디로 가야할지 모르겠다.

+0

어떤 계층 구조를 사용하고 있습니까? 내비게이션 컨트롤러? – Alexander

답변

2

메모리를 너무 많이 사용하면 시스템이 DIY 시스템보다 효율적으로 처리합니다. 그래서 메모리 경고, ARC, 풀 및 다른 모든 좋은 것들이 처음부터있었습니다. 그래서 당신이 성취하고자하는 것에 대해 조언하고 그에 따라 메모리 워닝을 처리하십시오. 그런데 viewController에 데이터를 저장하는 것은 좋지 않습니다. 대신 데이터 구조를 별도의 객체로 유지해야합니다 (MVC에서 제안하는 것처럼). 예를 들어 모든 뷰 컨트롤러에서 액세스 할 수있는 싱글 톤 객체에 데이터를 보관할 수 있습니다. 이렇게하면 모든 VC의 체인에 대한 포인터를 유지하면서 더 이상 필요하지 않은 메모리를 해제 할 수 있습니다.

0

저장하려는 데이터의 종류에 따라 다릅니다. iOS의 데이터 저장소 계층 구조로 올라갈 것입니다. NSUserDefaults가 도움이되는지 확인하십시오 (질문의 성격 상, 도움이되지 않을 것입니다). 그런 다음 SQLite를 사용해보십시오. 그런 다음 핵심 데이터로 이동하십시오. 데이터의 특성에 따라 데이터를 파일에 저장해 볼 수도 있습니다. 레벨을 탐색 할 때이 중간 데이터를 모두 저장하는 별도의 클래스에 정적 메서드를 포함 할 수 있다면 환상적 일 것입니다. 최종 데이터를 저장하고 나면 모든 임시 저장소를 삭제하면 완료됩니다.

오,이 기술을 사용하는 또 다른 장점은 사용자가 어떤 이유로 앱을 죽이고 다시 실행하거나 앱이 예기치 않게 충돌 한 경우에 대비하여 '이전에 중단 한 부분부터 진행하는 것입니다. 이러한 시나리오에서는 내비게이션이 수행 된 수준까지 점검하고 거기에서부터 진행하십시오.