क्या किसी को पता है कि एक एनआईएसटीमर को रोकने के लिए सबसे अच्छा समय कब है जो टाइमर और नियंत्रक के बीच चक्र बनाए रखने से बचने के लिए UIViewController के अंदर संदर्भ आयोजित किया जाता है?चक्र को बनाए रखने से बचने के लिए UIViewController के अंदर NSTimer को अमान्य करने का सर्वोत्तम समय
यहां अधिक जानकारी में सवाल है: मेरे पास UIViewController के अंदर एक एनएसटीमर है।
statusTimer = [NSTimer scheduledTimerWithTimeInterval: 1 target: self selector: @selector(updateStatus) userInfo: nil repeats: YES];
ऊपर दृश्य नियंत्रक के लिए एक संदर्भ पकड़ करने के लिए टाइमर का कारण बनता है:
दृश्य नियंत्रक के viewDidLoad के दौरान, मैं टाइमर शुरू करते हैं। जहाँ मैं [statusTimer अमान्य] को कॉल कर दिया नियंत्रक के संदर्भ में जारी करने के लिए टाइमर के लिए मजबूर करने कर सकते हैं:
अब मैं अपने नियंत्रक (उदाहरण के लिए माता-पिता नियंत्रक विज्ञप्ति यह)
सवाल यह है कि जारी करने के लिए करना चाहते हैं?
मैंने इसे ViewDidUnload में डालने का प्रयास किया, लेकिन जब तक दृश्य को स्मृति चेतावनी प्राप्त नहीं होती तब तक इसे निकाल दिया नहीं जाता है, इसलिए एक अच्छी जगह नहीं है। मैंने dealloc की कोशिश की, लेकिन जब तक टाइमर जीवित रहता है तब तक dealloc कभी नहीं कहा जाएगा (चिकन & अंडा समस्या)।
कोई अच्छा सुझाव?
के लिए काम किया है टाइमर में दृश्य नियंत्रक बनाए रखने के लिए कोई जरूरत नहीं है। वीसी को टाइमर का मालिक होना चाहिए, जैसा कि किसी अन्य ऑब्जेक्ट की तरह होगा, और उपयुक्त होने पर इसे नष्ट कर देना चाहिए। – logancautrell
@logancautrell, आपके पास एक अच्छा बिंदु है, लेकिन 'एनएसटीमर' आपके द्वारा पारित लक्ष्य को बरकरार रखता है और इसे बदला नहीं जा सकता है। (कुछ जवाब इस बात के बारे में सुझाव देने और काम करने के तरीकों का सुझाव देते हैं।) –
यिक्स, मैं उस समस्या को देखता हूं जिसमें आप चल रहे हैं। एक विकल्प है कि एक सहायक वस्तु को जोड़ना जो आपके वीसी और टाइमर दोनों के पास है। – logancautrell