0

plist で適切な単語を見つけて除外するループがたくさんあります。ただし、非常に遅いため、plist には合計で約 2000 語あります。以下のコードを参照してください。これを高速化する必要があります。約 2 ~ 3 秒の遅延が発生します。どうすればよいかわかりません。

plist は約 200 個の配列で構成されており、それぞれに 10 個の単語が含まれています。そのため、plist の辞書を取得しますdict。次に、必要な単語が見つかるまで、これらすべての配列を調べます。

for (int i = 0; i < [lang1Words count]; i++)
    {        
        NSString *errorWordLang1 = [lang1Words objectAtIndex:i];

        for (NSArray *a in [dict allValues])
        {
            for (NSString *s in a)
            {
                if ([errorWordLang1 isEqualToString:s])
                {
                    NSArray *temp = [dict allKeysForObject:a];
                    NSString *originLang1ArrayKey = [temp objectAtIndex:0];
                    NSArray *lang1Temp = [self getWordsArrayForKey:originLang1ArrayKey];
                    NSInteger index = [lang1Temp indexOfObject:errorWordLang1];
                    NSString *originLang2ArrayKey;
                    if ([languageKey isEqualToString:@"Latin"]) originLang2ArrayKey = [originLang1ArrayKey stringByReplacingOccurrencesOfString:@"Latin" withString:@"English"];
                    else if ([languageKey isEqualToString:@"English"]) originLang2ArrayKey = [originLang1ArrayKey stringByReplacingOccurrencesOfString:@"English" withString:@"Latin"];
                    NSArray *lang2Temp = [self getWordsArrayForKey:originLang2ArrayKey];
                    NSString *errorWordLang2 = [lang2Temp objectAtIndex:index];

                    if (errorWordLang2 == nil || errorWordLang1 == nil) break;

                    [orderedLang2Words addObject:errorWordLang2];
                    [orderedLang1Words addObject:errorWordLang1];
                }
            }
        }
    }
4

1 に答える 1

0

インスツルメント (具体的にはタイム プロファイル インストゥルメント) を使用してプロファイルを作成し、保存したプロファイルを投稿してください。プロファイラーなしで最適化することは、目隠しをしてターゲットを狙うようなものです。

于 2012-10-13T18:29:10.537 に答える