को बनाए रखना जहां तक मैं समझता हूँ कि एक ब्लॉक एक वस्तु की तरह काम करता है, उस में आप की नकल जैसे भेज सकते हैं या यह करने के लिए संदेश जारी कर सकते हैं,:EXC_BAD_ACCESS प्रतिलिपि बनाते समय या ब्लॉक
[myBlock copy];
हालांकि जब भी मैं ऐसा करते हैं, या रिहाई एक ब्लॉक, मुझे EXC_BAD_ACCESS मिलता है।
अगर मैं ब्लॉक कार्यों का उपयोग, सब कुछ उम्मीद के रूप में, उदा .:
Block_copy(myBlock);
मैं रिहा और नकल ब्लॉक समान थे के दोनों तरीकों से सोचा काम करता है?
यह कोई समस्या नहीं है, लेकिन यह थोड़ा परेशान है कि अगर मेरे पास एक संपत्ति (प्रतिलिपि) है जो ब्लॉक है, तो मुझे खुद को सेटर विधि लिखनी है।
उदाहरण के लिए: गुण के साथ:
//Header
@property (nonatomic, copy) void (^cancelledBlock)(void);
//Implementation
@sythesize cancelledBlock;
जब cancelledBlock
की स्थापना EXC_BAD_ACCESS की ओर जाता है, लेकिन अगर मैं करता हूँ:
//Header
@property (nonatomic, copy) void (^cancelledBlock)(void);
//Implementation
@sythesize cancelledBlock; //saves me doing the getter as well
- (void)setCancelledBlock:(void (^)(void))aCancelledBlock {
if (cancelledBlock == aCancelledBlock) {
return;
}
void (^oldValue)(void) = cancelledBlock;
cancelledBlock = Block_copy(aCancelledBlock);
Block_release(oldValue);
}
कोई EXC_BAD_ACCESS है और सब कुछ एकदम सही ढंग से चलाता है।
आपको केवल वही रिलीज़ करना चाहिए जो आपने पहले बनाए रखा था या कॉपी किया था। – Richard
मुझे पता है कि, जैसा कि मैंने अपने प्रश्न में कहा है कि '[myBlock copy]' करने की कोशिश कर रहा है EXC_BAD_ACCESS देता है, लेकिन 'Block_copy (myBlock)' –
नहीं है क्या आप हमें एक पूर्ण उदाहरण दिखा सकते हैं? –