2011-10-05 16 views
7

अपने iPhone एप्लिकेशन में मैं कई स्थानों पर जहां मैं एककैसे जांचें कि कोई प्रदर्शनकर्ता है: निष्पादित करने का इंतजार?

[object performSelector: withObject: afterDelay:]

कॉल कर सकते हैं मिल गया। सभी एक ही विधि के लिए नेतृत्व करते हैं। अब, उस विधि में मैं केवल कुछ नवीनतम कोड पर कुछ कोड निष्पादित करना चाहता हूं। अगर यह पहला था, तो मैं बस [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(thisMethod) object:nil] कर सकता था और सुनिश्चित कर सकता हूं कि इसे एक बार बुलाया जाए।

लेकिन, क्या यह बताने का कोई तरीका है कि क्या कोई अन्य विधि कॉल निष्पादित होने की प्रतीक्षा कर रही है?

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

उत्तर

6

वैसे आप क्या कर सकते हैं यह है: जब भी आप [object performSelector: withObject: afterDelay:] पर कॉल करते हैं तो बस उस पंक्ति को जोड़ें जिसे आपने ऊपर बताया है। आप वास्तव में एक विधि बना सकते हैं जो आपके लिए इसे संभालती है। उदाहरण के लिए:

- (void)performSelectorOnce:(SEL)selector withObject:(id)object afterDelay:(NSTimeInterval)delay 
{ 
    [NSObject cancelPreviousPerformRequestsWithTarget:object selector:selector object:object]; 
    [self performSelector:selector withObject:object afterDelay:delay]; 
} 

और की तुलना में जहां कभी आप [object performSelector: withObject: afterDelay:] का उपयोग सिर्फ [आत्म performSelectorOnce: withObject: afterDelay:] के साथ बदलने;

यदि आप इसे कई ऑब्जेक्ट्स में उपयोग करना चाहते हैं तो आप वास्तव में एनएसओब्जेक्ट श्रेणी बना सकते हैं और वहां विधि जोड़ सकते हैं।

मुझे बताएं कि यह आपके लिए काम करता है या नहीं।

+0

क्या होगा यदि आप पहले निर्धारित समय को संशोधित किए बिना लगातार कॉल को अनदेखा करना चाहते हैं? उदाहरण के लिए तालिका दृश्य को अपडेट करने के लिए कॉल करें। – Rivera