傻瓜學編程之block_1
阿新 • • 發佈:2017-10-11
.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