ব্লকগুলি যাওয়ার উপায়। আপনার কাছে জটিল প্যারামিটার থাকতে পারে, সুরক্ষা টাইপ করুন এবং এটি এখানে বেশিরভাগ পুরানো উত্তরগুলির চেয়ে অনেক সহজ এবং নিরাপদ। উদাহরণস্বরূপ, আপনি কেবল লিখতে পারেন:
[MONBlock performBlock: afterDelay:2]
ব্লকগুলি আপনাকে স্বেচ্ছাচারিত প্যারামিটার তালিকা, রেফারেন্স অবজেক্ট এবং ভেরিয়েবলগুলি ক্যাপচার করতে দেয়।
ব্যাকিং বাস্তবায়ন (বেসিক):
@interface MONBlock : NSObject
+ (void)performBlock:(void(^)())pBlock afterDelay:(NSTimeInterval)pDelay;
@end
@implementation MONBlock
+ (void)imp_performBlock:(void(^)())pBlock
{
pBlock();
}
+ (void)performBlock:(void(^)())pBlock afterDelay:(NSTimeInterval)pDelay
{
[self performSelector:@selector(imp_performBlock:)
withObject:[pBlock copy]
afterDelay:pDelay];
}
@end
উদাহরণ:
int main(int argc, const char * argv[])
{
@autoreleasepool {
__block bool didPrint = false;
int pi = 3;
[MONBlock performBlock:^{NSLog(@"Hello, World! pi is %i", pi); didPrint = true;} afterDelay:2];
while (!didPrint) {
[NSRunLoop.currentRunLoop runUntilDate:[NSDate dateWithTimeInterval:0.1 sinceDate:NSDate.date]];
}
NSLog(@"(Bye, World!)");
}
return 0;
}
অন্য উদাহরণের জন্য মাইকের উত্তর (+1) দেখুন।