Դաս 12 – Objective-C: Blocks

0

Objective-C-ն սահմանում է օբյեկտը, որը համատեղում է տվյալները համապատասխան վարքագծի հետ։ Երբեմն, իմաստ ունի պարզապես ներկայացնել մի խնդիր կամ վարքագծերի միասնություն, այլ ոչ թե մեթոդների հավաքածու։

Block-երը լեզվի մակարդակի առանձնահատկություններ են ավելացված է C-ին, Objective-C-ին և C ++-ին, որոնք թույլ են տալիս Ձեզ ստեղծել կոդի առանձին սեգմենտներ, որը կարելի է փոխանցել մեթոդներին կամ ֆունկցիաներին, ասես նրանք արժեքներ են: Block-երը Objective-C օբյեկտներ են․ ինչը նշանակում է, որ նրանք հնարավոր է ավելացնել հավաքածուներին, ինչպիսիք են NSArray-ը կամ NSDictionary-ը: Դրանք նաև ունակ են վերցնել արժեքներ շրջապատող շրջանից՝ դարձնելով դրանք lambdas ինչպես այլ ծրագրավորման լեզուներում։

Պարզ Block-ի syntax

returntype (^blockName)(argumentType);

Պարզ Block-ի իրականացում

returntype (^blockName)(argumentType)= ^{
};

Ահա պարզ օրինակը

void (^simpleBlock)(void) = ^{
    NSLog(@"This is a block");
};

block-ը կարել է կոչ անել օգտագործելով

simpleBlock();

Block-երը վերցնում են Argument-ներ և վերադարձնում Value-ներ

Block-երը նույնպես կարող է  վերցնել argument-ներ և վերադարձնում արժեքներ, ինչպես մեթոդները և ֆունկցիան։

Ահա պարզ օրինակ

double (^multiplyTwoValues)(double, double) = 
    ^(double firstValue, double secondValue) {
	    return firstValue * secondValue;
    };
double result = multiplyTwoValues(2,4); 
NSLog(@"The result is %f", result);

 

Block-երը, որոնք օգտագործում են type definitions

Ահա block-ում typedef օգտագործելու մի պարզ օրինակ։ Խնդրում ենք նկատի ունենալ, որ այս նմուշը դեռևս չի աշխատում օնլայն compiler-ում։ Օգտագործեք Xcode-ը նույնը գործարկելու համար։

#import <Foundation/Foundation.h>

typedef void (^CompletionBlock)();
@interface SampleClass:NSObject
- (void)performActionWithCompletion: (CompletionBlock)completionBlock;
@end

@implementation SampleClass

- (void)performActionWithCompletion🙁CompletionBlock)completionBlock{

    NSLog(@"Action Performed");
    completionBlock();
}

@end

int main()
{
    /* my first program in Objective-C */
    SampleClass *sampleClass = [[SampleClass alloc]init];
    [sampleClass performActionWithCompletion:^{
        NSLog(@"Completion is called to intimate action is performed.");
    }];
    
    return 0;
}

Եկեք կազմենք և իրականացնենք այն, ապա այն կմատուցի հետևյալ արդյունքը:

2013-09-10 08:13:57.155 demo[284:303] Action Performed
2013-09-10 08:13:57.157 demo[284:303] Completion is called to intimate action is performed.

Block-երը ավելի շատ օգտագործում են iOS հավելվածների Mac OS X-ի համար։ Այնպես, որ շատ կարևոր է հասկանալ block-երի իրացումը։

Հարգելի ընթերցող, խնդրում ենք չմոռանալ like տալ մեր ֆեյսբուքյան էջին, քանի որ նորությունների մեծ մասը առաջինը տեղադրվում է հենց այնտեղ։ Ինչպես նաև հետևեք մեզ այլ սոցիալական ցանցերում և, իհարկե, գրանցվեք մեր բլոգում։

Share.