मैं NSOperationQueue
का उपयोग कर रहा हूं और NSOperationBlocks
कतारबद्ध कर रहा हूं। अब, ब्लॉक ब्लॉक में किसी उदाहरण के लिए एक मजबूत संदर्भ है, और बुला वस्तु भी खंड पर एक मजबूत पकड़ है, तो वह ऐसा कुछ करने के लिए सलाह दी गई है:ब्लॉक के अंदर कमजोर संदर्भ
__weak Cell *weakSelf = self;
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
UIImage *image = /* render some image */
/* what if by the time I get here self no longer exists? */
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[weakSelf setImageViewImage:image];
}];
}];
[self.renderQueue addOperation:op];
मेरे सवाल तो, है, मान लें कि उस समय तक छवि प्रतिपादन खत्म और उस लाइन वापस (यह, पुनः आवंटित की जाती किया गया है संभवतः सेल पुन: उपयोग, जो औपचारिक रूप देने के लिए थोड़ा मुश्किल है की वजह से) आता है, Cell
ऑब्जेक्ट अब मौजूद नहीं हैं। जब मैं [weakSelf setImageViewImage:]
तक पहुंचने के लिए जाता हूं, तो क्या यह EXC_BAD_ACCESS
त्रुटि का कारण बनता है?
वर्तमान में मैं यह पता लगाने की कोशिश कर रहा हूं कि मेरी समस्या का कारण क्या है, और मुझे लगता है कि इसका इसके साथ कुछ संबंध हो सकता है।
सेल renderQueue के लिए एक मजबूत रेफरी है? क्या किसी और के पास क्यूई को प्रस्तुत करने के लिए एक मजबूत रेफरी है? यदि आप EXC_BAD_ACCESS के कारण का पता लगाना चाहते हैं, तो एक इंटरैक्टिव डीबगर या इंस्ट्रूमेंट्स का उपयोग करें। – outis
कमजोर संदर्भ यहां असफल होना चाहिए। एआरसी मानते हुए, 'ओपी' इस कोड में जो भी तरीका है, उसके अंत में जारी किया जा रहा है, (इसे ऑपरेशन कतार द्वारा भी बनाए रखा/जारी किया गया है, लेकिन इस समय यह अप्रासंगिक है)। यदि आप ब्लॉक को रिहा करने के लिए 'स्वयं' के 'डेलोक' पर भरोसा कर रहे थे, तो केवल एक बरकरार चक्र होगा, यानी, आप इसे एक ivar में संग्रहीत कर रहे थे। यहां मामला नहीं है, और इसलिए आपको 'स्वयं' बनाए रखने वाले ब्लॉक के बारे में चिंता करने की आवश्यकता नहीं है। –
तो ऑपरेशन कतार कब आइटम जारी करती है? निष्पादन पूरा करने के बाद, स्वचालित रूप से? या मुझे मैन्युअल रूप से ब्लॉक जारी करना होगा? मैं एआरसी का उपयोग कर रहा हूँ। – Snowman