2013-05-16 6 views
1

사전을 사용하는 게임을 만들었습니다. 그것에는 대략 73000의 단어가있다. 그러나 검토 과정을 거친 후 앱이 거부되었습니다. 다음은 리뷰입니다.사전을 응용 프로그램에로드하는 가장 좋은 방법은 무엇입니까? iOS

"iOS 6.1.3을 실행하는 iPad에서 앱이 다운 된 것을 발견했습니다." "재생 버튼을 누르면 앱이 충돌합니다." "너무 많은 메모리를 사용하는 경우 앱에이 문제가 발생할 수 있습니다."

나는 혼란 스럽습니다. 6.1.3을 실행하는 iPhone 또는 6.1.3을 실행하는 iPad에서 앱에 문제가 없습니다. 그래서 나는 그것이 iPad mini에서 추락했다고 가정하고 있습니다. 사전을 메모리에로드하는 데 더 효율적인 방법이 있습니까? 이것은 재생 버튼을 누른 후에 현재 수행하는 방법입니다. 미리 감사드립니다!

NSString *filePath = [[NSBundle mainBundle] pathForResource: [NSString stringWithFormat: @"dictionary"] ofType:@"txt"]; //set where to get the dictionary from 
    NSData* data = [NSData dataWithContentsOfFile:filePath]; //pull the content from the file into memory 
    NSString* string = [[[NSString alloc] initWithBytes:[data bytes] 
               length:[data length] 
               encoding:NSUTF8StringEncoding] autorelease];//convert the bytes from the file into a string 
    NSString* delimiter = @"\n";//split the string around newline characters to create an array 
    currentDict = [string componentsSeparatedByString:delimiter]; 
    [currentDict retain]; 
+0

단어가 들어있는 파일의 크기는 얼마입니까? 1,000,000 바이트보다 작 으면 문제가 다른 곳에 있다고 의심됩니다. (그들은 당신에게 어떤 흔적이나 덤프를 보냈습니까?) –

+0

프로파일 링 소프트웨어를 실행 했습니까? XCode와 함께 제공되는 도구 도구에는 할당이라는 도구가있어 메모리가 어느 위치에 있는지에 대한 통찰력을 얻을 수 있습니다. – isaac

+0

파일의 크기는 1,745,228 바이트입니다. 이 점이 다른 점이 있습니까? – PCoder123

답변

1

마치 73,000 단어가 기억에 긴장감을 줄 것 같지 않으며 완전히 다른 것일 수 있습니다. 인스트루먼트를 실행하고 할당 도구를 사용하여 메모리 상태를 모니터링하십시오. 잘못한 사전인지 확인하십시오.

그렇다면 사용하는 전략은 여러 가지 이유 (사용자가 제안하는 것을 포함하여)에 적합하지 않습니다. 주어진 시간에 필요한 사전 부분에 접근 할 수있게 해주는 여러 가지 접근법이 있습니다. 현재 접근 방식은 항상 내가 기억할 수있는 방식입니다.

간단한 해결책은 NSDictionary로 변환하고 파일에서로드하는 것일 수 있습니다. 좀 더 복잡하지만보다 효율적인 아직 해결되지 않은 솔루션은 미리 채워진 CoreData 데이터베이스를 롤아웃하는 것입니다 (예를 들어 github를 스누핑하면 기존 솔루션이 많이 있음).

+0

NSDictionary 또는 NSArray를로드하는 것이 훨씬 더 적은 저장 공간을 필요로하는 것은 분명하지 않습니다. –

+0

감사합니다. 나는 Instruments를 시험해 보았는데, Dictionary가 문제인 것처럼 보입니다. 나는 CoreData Db를 시도 할 것이다. – PCoder123

+1

@HotLicks 디스크에 저장 공간이 덜 필요하지는 않지만 매번 파일의 줄을 분할 할 필요가 없으므로로드하는 것이 더 효율적일 수 있습니다. 현재 접근법에서는 소스 문자열 (전체 파일)과 라인 배열이 동시에 메모리에 있기 때문에 대략 두 배의 임시 메모리가 필요합니다. – omz

0

매우 느리고 메모리 집약적 인 방법으로 70k 단어를 저장하는 것처럼 보입니다.

작은 사전로드 된 SQLite 데이터베이스 또는 적어도 2 진 plist 파일에 전체 사전을 저장하는 것이 좋습니다. 메모리에있는 모든 내용없이 검색을 실행할 수 있으므로 데이터베이스가 실제로 더 나은 선택입니다.