खोज…
वाक्य - विन्यास
एक चर के रूप में:
रिटर्नटाइप (^ ब्लॉकनाम) (पैरामीटरटाइप्स) = ^ रिटर्नटाइप (पैरामीटर) {...};
एक संपत्ति के रूप में:
@property (गैर-परमाणु, प्रतिलिपि) रिटर्न टाइप (^ ब्लॉकनाम) (पैरामीटरटाइप्स);
एक विधि पैरामीटर के रूप में:
- (शून्य) मेथडब्लॉकब्लॉक: (रिटर्नटाइप (^) (पैरामीटरटाइप्स)) ब्लॉकनाम;
एक टंकण के रूप में:
टाइपडिफ रिटर्न टाइप (^ टाइपनेम) (पैरामीटरटाइप्स);
TypeName blockName = ^ returnType (पैरामीटर) {...};
UIView एनिमेशन
[UIView animateWithDuration:1.0
animations:^{
someView.alpha = 0;
otherView.alpha = 1;
}
completion:^(BOOL finished) {
[someView removeFromSuperview];
}];
कैरेट "^" चरित्र एक ब्लॉक को परिभाषित करता है। उदाहरण के लिए, ^{ … }
एक ब्लॉक है। अधिक विशेष रूप से, यह एक ब्लॉक है जो "शून्य" देता है और कोई तर्क स्वीकार नहीं करता है। यह इस तरह की एक विधि के बराबर है: "- (शून्य) कुछ;" लेकिन कोड ब्लॉक से जुड़ा कोई अंतर्निहित नाम नहीं है।
एक ब्लॉक को परिभाषित करें जो तर्कों को स्वीकार कर सकता है बहुत समान रूप से काम करता है। किसी ब्लॉक को तर्क देने के लिए, आप ब्लॉक को इस तरह परिभाषित करते हैं: ^ (BOOL someArg, NSString someStr) {…} *। जब आप API कॉल का उपयोग करते हैं जो ब्लॉक का समर्थन करते हैं, तो आप ऐसे ब्लॉक लिखेंगे जो विशेष रूप से एनीमेशन ब्लॉक या NSURLConnection ब्लॉकों के लिए समान दिखते हैं, जैसा कि ऊपर दिए गए उदाहरण में दिखाया गया है।
कस्टम विधियों के लिए कस्टम पूर्णता ब्लॉक
1- अपने खुद के कस्टम ब्लॉक को परिभाषित करें
typedef void(^myCustomCompletion)(BOOL);
2- कस्टम विधि बनाएं जो एक पैरामीटर के रूप में आपके कस्टम पूरा होने वाले ब्लॉक को लेता है।
-(void) customMethodName:(myCustomCompletion) compblock{
//do stuff
// check if completion block exist; if we do not check it will throw an exception
if(complblock)
compblock(YES);
}
3- अपने तरीके में ब्लॉक का उपयोग कैसे करें
[self customMethodName:^(BOOL finished) {
if(finished){
NSLog(@"success");
}
}];
कैप्चर किए गए चर को संशोधित करें
ब्लॉक उन चर को कैप्चर करेगा जो एक ही शाब्दिक दायरे में दिखाई देते हैं। आम तौर पर इन चरों को "कॉन्स्ट" मान के रूप में कैप्चर किया जाता है:
int val = 10;
void (^blk)(void) = ^{
val = 20; // Error! val is a constant value and cannot be modified!
};
चर को संशोधित करने के लिए, आपको __block भंडारण प्रकार संशोधक का उपयोग करने की आवश्यकता है।
__block int val = 10;
void (^blk)(void) = ^{
val = 20; // Correct! val now can be modified as an ordinary variable.
};