2011-06-14 4 views
0

약 300 개의 배열 레코드가있는 JSON 피드를 읽습니다. 각 레코드는 약 8 개의 항목이있는 개체입니다. 시작시 사전에 로컬로 저장하는 것이 많습니까?300 레코드 저장 iPhone

그렇다면 데이터가 요청 될 때마다 온라인에서 피드의 데이터를 읽어야합니까?

+0

아니요, 피드 길이와 크기는 얼마입니까? – Synxmax

답변

2

코드 수가 적은 접근 방식은 사전을 plist에 저장하고 데이터를 직접 쿼리하는 것입니다. iPhone은 지연없이 메모리에있는 300 개의 객체를 처리 할 수 ​​있으므로, 내가하지 않으면 다른 작업에 신경 쓰지 않을 것입니다. 피드를 새로 고칠시기는 응용 프로그램 논리에 따라 다릅니다.

NSString *path = [[NSBundle mainBundle] pathForResource:@"feed" ofType:@"plist"]; 
[dict writeToFile:path atomically:YES]; // write 
[dict dictionaryWithContentsOfFile:path]; // read 
[dict enumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL *stop){ //iterate 
    NSLog(@"%@",[NSString stringWithFormat:@"%@=%@", key, obj]); 
}]; 

좀 더 성능을 높이려면 바이너리 plist를 사용하십시오. 복잡한 쿼리를 작성해야하는 경우 NSPredicate 또는 Core Data를 사용하십시오.

+1

이것은 NSUserDefaults가 아닌 기본 설정 및 설정입니다. 응용 프로그램과 관련된 데이터를 저장하는 데 사용하지 마십시오. plist를 문서 디렉토리에 보관하거나 coredata를 사용하십시오. 이것은 나쁜 접근입니다. –

+0

As per docs ... "기본 시스템을 사용하면 응용 프로그램이 사용자의 기본 설정과 일치하도록 동작을 사용자 정의 할 수 있습니다. 예를 들어 사용자가 응용 프로그램에 표시되는 측정 단위 또는 문서 자동 저장 빈도를 결정할 수 있습니다. 이러한 기본 설정은 사용자의 기본 데이터베이스에있는 매개 변수 집합에 값을 할당함으로써 시작됩니다. 매개 변수는 시작시 응용 프로그램의 기본 상태 또는 기본적으로 작동하는 방식을 결정하는 데 일반적으로 사용되므로 기본값이라고합니다. " –

+0

+1 나는 대답을 편집했다. plist 대신'NSUserDefaults'를 사용할 이유는 없습니다. 그것은'NSArgumentDomain'을 올려다 보는 밀리 세컨드를 낭비하고 대회에 반대하며 뭔가 다른 것을 위해 고안되어 있으므로 배울 필요가없는 몇 가지 추가 정보가 있습니다. – Jano

-1

예 데이터를 요청할 때마다 피드 온라인에서 데이터를 읽어야합니다. 300 개의 배열 레코드가 너무 큰 데이터는 아니지만. 그러나 라이브 피드의 경우 데이터가 요청 될 때마다 항상 데이터를 읽어야합니다.

+0

이것은 이해가되지 않습니다. 캐싱은 클라이언트/서버 아키텍처에서 없어서는 안될 부분이지만 새로운 데이터를 확인해야하지만 매번 모든 원본 데이터를 다운로드해야하는 이유는 무엇입니까? 불필요한 대역폭과 시간을 사용하고 있습니다. 좋은 방법이 아닙니다. –

3

자주 변경되지 않으면 코어 데이터 저장소에 캐시 할 수 있으며 시작시 저장소를 다시 만드는 대신 다른 레코드, 삭제 된 레코드 또는 새로 추가 된 레코드를 업데이트 할 수 있습니다.

자주 변경 되더라도 CD를 사용하는 또 다른 장점은 각 레코드를 반복하지 않고 특정 레코드를 핵심 데이터 저장소에 신속하게 쿼리 할 수 ​​있다는 것입니다.