objective c उनल कतारबद्ध प्रदर्शन रद्द करना चयनकर्ता: बाद में कॉल करें




हाल ही में कॉल (4)

क्या किसी को पता है कि ईवेंट स्टैक या टाइमर स्टैक से पहले से ही कतारबद्ध चयनकर्ता घटनाओं को रद्द करना संभव है (या जो भी तंत्र इसे एपीआई द्वारा उपयोग किया जाता है) जब आप performSelector:withObject:afterDelay कहते हैं performSelector:withObject:afterDelay ?

मैं इस ईवेंट स्टैक का उपयोग टैबबार टैब के भीतर किसी छवि के गुणों को बदलने के लिए कर रहा था, और कभी-कभी लूप के लिए निष्पादित में 10 सेकंड के लायक परिवर्तनों को कतारबद्ध करता था ... शायद 5 मिलीसेकंड या तो।

समस्या तब उत्पन्न होती है जब उपयोगकर्ता टैब स्विच करता है ... जैसा कि कहता है कि मेरे पास छवि के लिए कतारबद्ध छवि परिवर्तन हैं जो टैब # 4 सक्षम होने पर प्रदर्शित होता है, और फिर उपयोगकर्ता जल्दी से टैब # 3 पर स्विच करता है और फिर टैब पर वापस जाता है # 4 ... फिर यह पुरानी कतार अभी भी खेल रहा था, जबकि कतार में लगभग 2 या 3 सेकंड के दौरान 10 सेकंड के लायक बदलावों को फिर से कतारबद्ध किया जाएगा, अगर पर्याप्त तेज़ी से स्विच किया जाता है ... लेकिन यहां तक ​​कि 5 सेकंड तक पहुंच रहा है धारा एक समस्या थी।

तो मुझे एक नया ढेर लगाने से पहले बदलावों के पुराने ढेर को रद्द करने के लिए कुछ रास्ता चाहिए ...

मैं इस प्रश्न को पिछले काल में लिख रहा हूं क्योंकि प्लेबैक फ़ंक्शन पर एक हॉक-आइड इवेंट फ़िल्टर जोड़कर मैं इस समस्या के वैकल्पिक समाधान के साथ पहले से ही आया हूं। हालांकि मैं अभी भी उत्सुक हूं यदि घटना रद्दीकरण संभव है, क्योंकि मुझे लगता है कि इस तरह का ज्ञान भविष्य में काम में आ जाएगा। प्रदान की गई किसी भी सहायता के लिए धन्यवाद :)


पिछले सभी प्रदर्शन अनुरोधों को रद्द करने के लिए, आप इसका उपयोग कर सकते हैं:

[NSObject cancelPreviousPerformRequestsWithTarget:self];   

NSRunLoop दस्तावेज़ों की जांच करें। आप चाहते हैं- रद्द करेंरफॉर्म चयनकर्ताओं के साथ लक्ष्य:


यदि आप "execEelector" की तलाश कर रहे हैं तो इसके मिलान "रद्द करेंप्रतिफॉर्मर चयनकर्ता" ... यह नहीं है। (उह, ऐप्पल, तुम मुझसे ऐसा क्यों करते हो ???)

द एर, आह, "मिलान" विधियां हैं: निष्पादनकर्ता रद्द करेंप्रतिफॉर्मफॉर्मफॉर्म WithTarget

(बस दस्तावेज़ों को खोजे बिना याद रखने के लिए इसे और अधिक कठिन बनाने के लिए।)


[NSObject cancelPreviousPerformRequestsWithTarget:]

या

[NSObject cancelPreviousPerformRequestsWithTarget:selector:object:]

target मूल वस्तु है जिस पर performSelector:afterDelay: में performSelector:afterDelay: गया था।

उदाहरण के लिए:

// schedule the selector
[self performSelector:@selector(mySel:) withObject:nil afterDelay:5.0];
// cancel the above call (and any others on self)
[NSObject cancelPreviousPerformRequestsWithTarget:self];

सेब डॉक्स देखें, यह performSelector:withObject:afterDelay: के अंत में सही है performSelector:withObject:afterDelay: विवरण।





selector