1. 程式人生 > >傻瓜學編程之block_1

傻瓜學編程之block_1

.com code read for 函數 locks target load 編程

1、引出

1.1、int pp = 3;for循環為dd賦值並 調用 finprint(int ,int)函數 獲取pp*dd的乘積,輸出
void finalValue(int d, int scale){
    
    printf(".......%d",scale*d);
    printf("\n");
    
}

void finprint(int j,int  i){
    
    printf("其他操作\n");

    void (*fin)(int d,int s) = &finalValue;
    
    fin(j,i);  
}

- (void)viewDidLoad {
    [super viewDidLoad];
    int dd ;
    int pp = 3;
    for (int j= 0; j<5; j++) {
        dd=j;
        finprint(pp,dd);
    }
}

a:必須獲取finalValue函數的名字,

b: finalValue如果想使用 dd,pp (也即finprint中的形式參數 j和i) 必須傳遞到finalValue中才可以使用;

1.2、不用必須獲取finalValue函數的名字,

void finprint(int j,int  i){
    
    printf("其他操作\n");

    void (^fina)(int d,int s) = ^(int d,int s){
        printf(".......%d",s*d);
        printf("\n");
    };
    fina(j,i);
}

- (void)viewDidLoad {
    [super viewDidLoad];
    int dd ;
    int pp = 3;
    for (int j= 0; j<5; j++) {
        dd=j;
        finprint(pp,dd);
    }
}

1.3、不用傳遞參數參數也可以訪問finprint中的形式參數 j和i;

void finprint(int j,int  i){
    
    printf("其他操作\n");

    void (^fina)(void) = ^(void){
        printf(".......%d",j*i);
        printf("\n");
    };
    fina();
}

2、 block

2.1、簡單概述:帶有自動變量(局部變量)的匿名函數;

1)沒有函數名

2) 帶有”^“號

2.2、語法格式:具體格式

^

返回值類型 參數列表 表達式

其中 返回值類型 參數列表 可省略

block
How Do I Declare A Block in Objective-C?

As a local variable:
returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...};


As a property: @property (nonatomic, copy, nullability) returnType (^blockName)(parameterTypes);
As a method parameter: - (void)someMethodThatTakesABlock:(returnType (^nullability)(parameterTypes))blockName;
As an argument to a method call: [someObject someMethodThatTakesABlock:^returnType (parameters) {...}];
As a typedef: typedef returnType (^TypeName)(parameterTypes); TypeName blockName = ^returnType(parameters) {...};
This site is not intended to be an exhaustive list of all possible uses of blocks.If you find yourself needing syntax not listed here, it is likely that a typedef would make your code more readable.Unable to access this site due to the profanity in the URL? http://goshdarnblocksyntax.com is a more work-friendly mirror.

傻瓜學編程之block_1