2010-07-19 19 views
7

अगर मैं इस तरह एक रनलोप सेट अप करता हूं:टाइमर ट्रिगर रनलॉप को कैसे रोकें?

NSRunloop* loop = [NSRunloop currentRunLoop]; 
[runLoop addTimer:anyTimer forMode:NSDefaultRunLoopMode]; 

क्या मैं इसे फिर से रोक सकता हूं? या आगे की कार्रवाई को ट्रिगर करने के लिए उपयोग की जाने वाली अधिसूचना को अनदेखा करने का एकमात्र तरीका है?

ठीक है, मैं समस्या के लिए एक उदाहरण देता हूं:

-(void)blinkeffekt:(double)pollingTime{ 

NSRunLoop* runLoop = [NSRunLoop currentRunLoop]; 

if (pollingTime != 0) { 
    NSTimeInterval interval =(double)pollingTime/1000; 
    NSTimer timer = [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(polling) userInfo:nil repeats:YES]; 
    [runLoop addTimer:timer forMode:NSDefaultRunLoopMode]; 
} 
else { 

    [timer invalidate]; 
} 

}

निश्चित रूप से, यहां कई त्रुटियां हैं - कोई प्रश्न नहीं। लेकिन मुझे लगता है, यह मेरी समस्या दिखाता है। और यह अभी तक उत्तर के साथ वास्तव में हल करने योग्य नहीं है।

मुझे टाइमर चलाने और बाद में इसे रोकने की आवश्यकता है। और आदर्श रूप से कक्षा में एक और समारोह से बाहर। लेकिन फिर मैं अब "टाइमर" तक नहीं पहुंच सकता और रनलोप यह पता लगाने की अनुमति नहीं देता है, अगर ऐसा "संदेश" उपलब्ध है। और यह बेहद अप्रभावी होगा, अगर मैं फ़ंक्शन के प्रत्येक कॉलिंग के लिए एक नया टाइमर पंजीकृत करूंगा।

उत्तर

19

आपको रनलूप से इसे हटाने के लिए टाइमर को एक अमान्य संदेश भेजने की आवश्यकता है।

See Doc

[anyTimer invalidate]; 
वहाँ से पहले
+0

, मैं वस्तु के लिए बाध्य करने के लिए टाइमर, कि मुझे नहीं संदर्भ ढीला था। लेकिन हाँ, तो यह काम करता है – nico

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