के बिना ब्लॉक में [स्वयं कोई फ़ंक्शन] पास करना संभव है क्या यह स्वयं से __weak ऑब्जेक्ट के बिना ब्लॉक में [स्वयं किसी भी समारोह] को पास करना संभव है?बिना किसी __weak ऑब्जेक्ट (आईओएस 5 + एआरसी)
[UIView animateWithDuration:0.8 animations:^{
//Do animationStuff
} completion:^(BOOL finished) {
[self anyFunction];
}];
आप एक बिना किसी चेतावनी के पूरा होने के ब्लॉक में [self anyFunction]
पारित कर सकते हैं:
एक उदाहरण जैसा कि इस प्रणाली की रूपरेखा से मान्य कोड है। लेकिन अगर आप एक पूर्णता ब्लॉक के साथ अपनी खुद की विधि लिखते हैं, तो निम्न चेतावनी होती है: इस ब्लॉक में दृढ़ता से 'स्वयं' को कैप्चर करने से चक्र को बनाए रखने की संभावना है।
एक कामकाजी समाधान काफी सरल है (आईओएस 5 + एआरसी)। ब्लॉक घोषित करने से पहले:
[weakSelf anyFunction];
लेकिन, वापस मेरे सवाल का:: क्यों एक __weak
उपयोग करने के लिए प्रणाली फ्रेमवर्क एपीआई में कोई जरूरत नहीं है
__weak MyClass *weakSelf = self;
और पूरा ब्लॉक में आप कॉल करनी होगी ऑब्जेक्ट और किसी भी चेतावनी के बिना self
का उपयोग करने के लिए। और ब्लॉक में __weak
ऑब्जेक्ट की आवश्यकता के बिना किसी विधि को कैसे कार्यान्वित करें?
आपके प्रयास के लिए धन्यवाद।
धन्यवाद, मेरा प्रश्न स्पष्ट किया गया है। मेरे मामले में ब्लॉक का स्वामित्व वाला ऑब्जेक्ट 'ivar' है, इसलिए आपको' self' 'की' __weak 'ऑब्जेक्ट का उपयोग करना होगा। लेकिन जब मैं उस कार्य में ऑब्जेक्ट घोषित करता हूं जहां ब्लॉक का उपयोग किया जाता है, तो 'स्वयं' को '__weak' ऑब्जेक्ट के बिना पास किया जा सकता है। यह समझ में आता है। एक बार फिर धन्यवाद। – andreschneider
जो मैंने पाया वह है [self.ivar performBlock:^{[self doSomething]; }]; एक संकलक चेतावनी का कारण बन जाएगा, जबकि [स्वयं प्रदर्शनब्लॉक:^{[स्वयं doSomething]; }]; एक संकलक चेतावनी का कारण नहीं है। –
शायद [स्वयं प्रदर्शनब्लॉक:^{[स्वयं doSomething];}]; प्रतिस्थापित किया जाना चाहिए [स्वयं प्रदर्शनब्लॉक:^{[स्वयं doSomething]; स्वयं = शून्य;}]; – dklt