(लेकिन इस सवाल का पूरी तरह से अलग है)क्या मुझे कभी भी एआरसी के तहत dispatch_release को कॉल करना है?
इस गैर एआरसी कोड उदाहरण एक GCD आधारित टाइमर सेट और यह एक dispatch_source_t वस्तु के लिए dispatch_release कॉल:
__block BOOL done = NO;
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());
if (timer) {
uint64_t milliseconds = 100ull;
uint64_t interval = milliseconds * NSEC_PER_MSEC;
uint64_t leeway = 10ull * NSEC_PER_MSEC;
__block typeof(self) _self = self;
dispatch_source_set_timer(timer, dispatch_walltime(NULL, 0), interval, leeway);
dispatch_source_set_event_handler(timer, ^{
//[_progressBar setProgress:exportSession.progress animated:YES];
if (done) {
dispatch_source_cancel(timer);
dispatch_release(timer);
_self.exportingMovieLabel.hidden = YES;
_self.exportingProgress.hidden = YES;
}
});
dispatch_resume(timer);
}
मुझे पता चला है कि आप कतार एआरसी के तहत वस्तुओं को जारी करने की आवश्यकता नहीं है। लेकिन अन्य जीसीडी वस्तुओं को एक प्रेषण स्रोत की तरह?
दावा किया गया "डुप्लिकेट प्रश्न" भी करीब नहीं है। जवाब विशेष रूप से जीसीडी कतारों के बारे में बात करते हैं। यह सवाल विशेष रूप से पूछता है कि क्या यह अन्य जीसीडी वस्तुओं के लिए सच है। – openfrog
इसे आज़माएं। यदि आवश्यक नहीं है तो यह कंपाइलर आपको नहीं देगा (यह नहीं है)। –
मेरे अनुभव में, ऐप्पल प्रलेखन हमेशा उल्लेख करता है कि आपको इसके आवश्यक रिलीज को प्रबंधित करने की आवश्यकता है। आमतौर पर, रिलीज करने के लिए विशिष्ट कार्य होते हैं। इस मामले में, दस्तावेज़ों को पढ़ना, ऐसा लगता है कि यह उपयोग पर निर्भर करता है कि आपको खुद को रिलीज़ करने की आवश्यकता है या नहीं। मैं इसका मतलब यह मानता हूं कि यदि आप dispatch_retain का उपयोग करते हैं और पॉइंटर पर पकड़ते हैं, तो आपको इसे स्वयं रिलीज़ करने की आवश्यकता होगी। मैंने इस समारोह का उपयोग नहीं किया है, हालांकि, इसे नमक के अनाज के साथ लें। –