2013-02-07 41 views
5

मैं एक मेडिकल डिक्शनरी (.csv फ़ाइल) को पार्स करने की कोशिश कर रहा हूं और फिर उन सभी शब्दों को UITextChecker के माध्यम से सीखना चाहता हूं: सीखने की विधि ताकि वर्तनी जांचकर्ता उन चिकित्सीय शर्तों को मान्य शब्दों के रूप में अनुमोदित कर सके।UITextChecker: सीखने के साथ स्मृति समस्या

मैं इस विधि को किसी अन्य थ्रेड में कॉल कर रहा हूं लेकिन सीएसवी फ़ाइल में शब्दों की मात्रा लगभग 50K है।

- (void)parseMyCSVFile{ 

for (int i = 1; i < [csvContent count]; i++) { 
    NSString *learntWord = [NSString stringWithFormat:@"%@",[csvContent objectAtIndex:i]]; 

    NSString *s = learntWord; 
    NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"()\n\""]; 
    s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""]; 


    if ([UITextChecker hasLearnedWord:s]){ 

     NSLog(@"skipped"); 

    } 
    else 
    { 
     [UITextChecker learnWord:s]; // Memory Issue Here 
     NSLog(@"learning"); 
    } 

    HUD.detailsLabelText = [NSString stringWithFormat:@"%i of %i",i,[csvContent count]]; 
} 

[self performSelectorOnMainThread:@selector(bgWorkEnded) withObject:nil waitUntilDone:YES]; 

} 

मैं उपकरण समय प्रोफाइलर आवेदन किया है और पता चला कि समस्या लाइन जहां मैं पाश अंदर शब्द सीख रहा हूँ में निहित है।

ऐप 5000 शब्द (लगभग) तक और फिर क्रैश तक शब्दकोश लोड करने का प्रयास करता है।

किसी भी मदद की सराहना की जाएगी।

धन्यवाद

+4

आप निश्चित रूप से कर रहे हैं तरीके एप्पल के क्यूए समूह शायद उम्मीद कभी नहीं में UITextChecker परीक्षण बल देते हैं। आप 1) मुख्य (UI) थ्रेड के बजाय पृष्ठभूमि थ्रेड में इसका उपयोग कर रहे हैं और 2) आप एक समय में हजारों शब्दों को जोड़ने की कोशिश कर रहे हैं। अगर आपको किसी और से सभ्य प्रतिक्रिया नहीं मिलती है, तो मैं पैकेजिंग को जितना अधिक कोड बता सकता हूं (जो समस्या का प्रदर्शन करता है) और [http://bugreporter.apple.com] पर एक बग फ़ाइल करें (http : //bugreporter.apple.com) उन्हें कोड को भेजने के लिए उन्हें कोड भेजना। –

+0

@autoreleasepool –

+1

का उपयोग करें आप प्रत्येक पुनरावृत्ति के लिए 2 एनएसएसट्रिंग और एनएससीएचएआरएटरसेट बना रहे हैं। यह देखने के लिए कि क्या यह महत्वपूर्ण है, अपने ऐप को प्रोफाइल करें। – jcm

उत्तर

1

आप एक पृष्ठभूमि धागे पर UIKit वर्ग तरीकों फोन नहीं चाहिए - दुर्घटनाओं में इस होगा परिणाम। इसके अलावा, आप अपनी विधि के अंदर एक ऑटोरेलीज पूल बनाना चाहिए ताकि आप किसी ऑब्जेक्ट को रिसाव न करें। चूंकि UITextChecker को मुख्य थ्रेड पर उपयोग किया जाना चाहिए, इसलिए मैं एक समय में केवल कुछ शब्द जोड़ने की सिफारिश करता हूं, फिर रन लूप पर लौटता हूं ताकि आप ऐप को रोक न सकें। इस प्रक्रिया के दौरान उपयोगकर्ता को स्पिनर प्रदर्शित करें ताकि वे जान सकें कि यह क्या कर रहा है।

0

बस i = 0. के मान को बदलें। इससे आपकी मदद मिलेगी। उदाहरण के लिए:

for (i=0; i<[csvContent count]; i++) 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^