iOS Block的簡單使用以及__block 和static修飾變量


 

簡單的代碼總結,不足之處多多指教。

//簡單的使用

-(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)); }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM