8

ऐसा करने का सही तरीका क्या है? NSTimer प्रलेखन का कहना है यह:क्या यह जीसीडी सीरियल कतार पर एनएसटीमीटर को शेड्यूल और अमान्य करने के लिए सुरक्षित है?

विशेष ध्यान

आप जो टाइमर स्थापित किया गया था पर धागे से इस संदेश को भेजने होंगे। यदि आप किसी अन्य धागे से इस संदेश को भेजने के लिए, टाइमर के साथ जुड़े इनपुट स्रोत अपनी दौड़ पाश, जो ठीक से बाहर निकलने से रोका जा सकता है धागा से हटाया नहीं जा सकता है।

GCD के बाद आपको विश्वास दिलाता यह नहीं है कि एक सीरियल कतार हमेशा एक ही धागे पर ब्लॉक चलेगा, क्या यह सुनिश्चित करें कि आप समय निर्धारित है और एक ही धागे पर एक NSTimer अमान्य सही तरीका है?

संपादित करें:

नीचे इस सवाल का जवाब की सलाह के बाद, मैं बनाया MSWeakTimer (https://github.com/mindsnacks/MSWeakTimer) जो एक कस्टम टाइमर GCD है कि किसी भी कतार से इस्तेमाल किया जा सकता का उपयोग कर कार्यान्वयन है।

+0

+1 MSWeakTimer के लिए ... हमारे भयानक स्मृति मुद्दों को हल कर दिया है! – jowie

उत्तर

9

आपको गुमनाम कार्यकर्ता धागा GCD द्वारा प्रबंधित पर एक NSTimer स्थापित नहीं करना चाहिए।

NSTimer के बजाय GCD, सी.एफ़ साथ उपयोग प्रेषण टाइमर स्रोतों dispatch_source_create (3)।

NSTimer वर्तमान थ्रेड runloop है, जो कुछ है कि एक GCD कतार के लिए समझ में आता है नहीं है पर निर्भर करता है। जीसीडी और रनलोप एपीआई के आसपास अधिक जानकारी के लिए डब्ल्यूडब्ल्यूडीसी2012 जीसीडी सत्र देखें।

+0

यह बहुत समझ में आता है। मुझे लगता है कि एकमात्र अपवाद मुख्य कतार होगा, क्या मैं सही हूँ? –

+0

सही है, जब तक एक प्रक्रिया dispatch_main फोन नहीं करता है के रूप में (3), मुख्य runloop और मुख्य कतार बंधे और मुख्य थ्रेड पर अमल करने के लिए गारंटी है। – das

+1

https://github.com/mindsnacks/MSWeakTimer –

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