標籤:平方根 pointer ptr str 傳值 簡單方法 blocks result class
簡單的代碼總結,不足之處多多指教。
//簡單的使用-(void)blockOne{ int number=23; int(^BlockOne)(int) = ^(int num2) { return number*num2; }; NSLog(@"輸出的block %d",BlockOne(2)); }-(void)blockTwo{ int(^block)(int,int) = ^(int stra,int str2) { return stra + str2; }; NSLog(@"這是第二個啊 %d",block(2,3)); }-(void)blockThree{ //下邊這個代表Block 會匯創輸入的 平方根(int a 就是參數咧,return a*a ; 就是行為主體)。記得主題後邊要加“;” 因為是敘述,而整個{} 後邊也要加“;” 因為Block 是個物件實體 //小括弧裡邊的3 會被當成 輸入值然後由block輸出3*3=9 致電該給reblock 這個變數 int reblock = ^(int a){ return a*a;}(3); NSLog(@"reblock %d",reblock); //上邊的簡單方法 回傳值 (^名字)(參數列); int (^square)(int); //有一個 square 的Block Pointer 其所指向的Block 是有一個int 輸入 和輸出 square = ^(int a){return a*a;};//將剛才的實體 制定給square //使用 NSLog(@"輸出square 的 平方%d",square(2)); }
Block中變數的值在函數內外的變化
-(void)blockPointer{ #define mark 變數的變化 是否可以改變其值 // 1 未加修飾 Block 外改變outA後 不改變最後結果 int outA = 8;
int(^myPtr)(int) = ^(int a) { return outA + a; }; outA = 10;
//去與 block 在同一個範圍中值
int result = myPtr(3);
NSLog(@"block 外改變 outA的值為10後 會是13嘛 %d",result); ///這個值在進行到 block中時 第一次 會copy 到block中去,下次再用直接用copy值,其值之後辯護啊 對其都不會有影響 指的是變數的值; 如果是一個pointer指標的話,它的值是可以在block 裡變化的 // 2 __block 修飾後 其外改變,可以改變 在其內改變 ,可以改變 //外部改變 __block int outB = 8;
int(^myPtrB)(int) = ^(int b) {
return outB + b; }; outB = 10;
//去與 block 在同一個範圍中值 int resultB = myPtrB(3); NSLog(@"block 外改變 outB的值為10後 會是13嘛 %d",resultB); //block 內部改變 __block int outC = 8; int(^myPtrC)(int) = ^(int c) { outC = 10; return outC + c; }; NSLog(@"block 內部 變 outC的值為10後 會是13嘛 %d",myPtrC(3)); }
#define mark static 修飾變數的時候值的變化// 用staic 修飾是的改變 因為outC是個static 變數會直接反應其值-(void)blockStaticChange{ // 2 __block 修飾後 其外改變,可以改變 在其內改變 ,可以改變 //外部改變 static int outB = 8; int(^myPtrB)(int) = ^(int b) { return outB + b; }; outB = 10; //去與 block 在同一個範圍中值 int resultB = myPtrB(3); NSLog(@"static 外改變 outB的值為10後 會是13嘛 %d",resultB); //block 內部改變 static int outC = 8; int(^myPtrC)(int) = ^(int c) { outC = 10; return outC + c; }; NSLog(@"static 內部 變 outC的值為10後 會是13嘛 %d",myPtrC(3)); }
iOS Block的簡單使用以及__block 和static修飾變數