नोट: शायद मेरे संपादन को पढ़ने के लिए स्क्रॉल करना उचित है।एक अलग धागे में एक एनएसटीमर को
मैं एक अलग धागे में एक एनएसटीमर स्थापित करने की कोशिश कर रहा हूं ताकि उपयोगकर्ता मेरे आवेदन के यूआई के साथ बातचीत कर सकें। ऐसा लगता है, लेकिन लीक्स कई मुद्दों की रिपोर्ट करता है - और मेरा मानना है कि मैंने इसे अपने टाइमर कोड पर सीमित कर दिया है।
वर्तमान में क्या हो रहा है यह है कि अद्यतन टिमर एक एनएसएआरएआर कंट्रोलर (टाइमर कंट्रोलर) तक पहुंचने का प्रयास करता है जो मेरे अनुप्रयोग इंटरफ़ेस में एनएसटीबल व्यू से जुड़ा हुआ है। वहां से, मैं पहली चयनित पंक्ति को पकड़ता हूं और अपना समय बदलता हूं। नोट: टाइमर नियंत्रक की सामग्री कोर डेटा के माध्यम से जेनरेट की गई प्रबंधित वस्तुओं का संग्रह है।
आसपास पढ़ने से, मुझे विश्वास है कि मुझे क्या करने की कोशिश करनी चाहिए, मेरे टाइमर माध्यमिक धागे की बजाय मुख्य थ्रेड पर अद्यतन टिमर फ़ंक्शन निष्पादित करना है।
मैं उम्मीद में यहां पोस्ट कर रहा हूं कि अधिक अनुभव वाला कोई व्यक्ति मुझे बता सकता है कि क्या यह एकमात्र चीज है जो मैं गलत कर रहा हूं। थ्रेडिंग पर ऐप्पल के दस्तावेज़ीकरण को पढ़ने के बाद, मुझे यह एक बहुत बड़ा विषय क्षेत्र मिला है।
NSThread *timerThread = [[[NSThread alloc] initWithTarget:self selector:@selector(startTimerThread) object:nil] autorelease];
[timerThread start];
-(void)startTimerThread
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
activeTimer = [[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES] retain];
[runLoop run];
[pool release];
}
-(void)updateTimer:(NSTimer *)timer
{
NSArray *selectedTimers = [timersController selectedObjects];
id selectedTimer = [selectedTimers objectAtIndex:0];
NSNumber *currentTimeSpent = [selectedTimer timeSpent];
[selectedTimer setValue:[NSNumber numberWithInt:[currentTimeSpent intValue]+1] forKey:@"timeSpent"];
}
-(void)stopTimer
{
[activeTimer invalidate];
[activeTimer release];
}
अद्यतन
मैं अभी भी पूरी तरह से इस रिसाव के संबंध में खो रहा हूँ। मुझे पता है कि मैं स्पष्ट रूप से कुछ गलत कर रहा हूं, लेकिन मैंने अपना आवेदन अपनी नंगे हड्डियों तक छीन लिया है और अभी भी इसे ढूंढ नहीं पाया जा सकता है। सादगी के लिए, मैंने अपने अनुप्रयोग नियंत्रक कोड को अपलोड किया है: a small pastebin। ध्यान दें कि मैंने अब टाइमर थ्रेड कोड हटा दिया है और इसके बजाय टाइमर को एक अलग रनलोप में चलाने का विकल्प चुना है (जैसा कि यहां बताया गया है)।
अगर मैं सेट लीक कॉल ट्री दोनों गुम प्रतीक और सिस्टम पुस्तकालय को छुपाने के लिए, मैं निम्नलिखित उत्पादन से पता चला है:
संपादित करें: स्क्रीनशॉट टूट और वजह से हटाया को लिंक।
आप अतिरिक्त रन लूप क्यों सेट अप करते हैं? आपका टाइमर आम तौर पर मुख्य रन लूप के साथ ठीक काम कर सकता है। – zneak
पेस्टबिन लिंक मर चुका है। –