Block 傳值

返回值是int類型  求兩個數的和的block
int (^block)(int, int) = ^int (int a, int b){
        return a + b;
    };
  NSLog(@"%d",block(3,5));

給block起別名
typedef int(^WLBlock)(int a, int b);

用別名申明一個block
WLBlock newBlock = ^int(int a, int b){       
     return a * b;   
};   
//  調用   
NSLog(@"%d",newBlock(3,5));


block傳值
將第二個界面值傳到第一個界面


在需要傳值界面
//  聲明block變量
@property (nonatomic, copy) PassByValue passValueBlock;
//  返回上個界面的方法
- (void)back:(UIBarButtonItem *)barButton{
    // 調用block進行傳值
    self.passValueBlock(@"傳值");
    [self.navigationController popViewControllerAnimated:YES];

}

在接收值的界面
//  去下個界面的值的方法
SecondViewController *secondVC = [[SecondViewController alloc] init];
secondVC.passValueBlock = ^void(NSString *str){

        self.navigationItem.title = str;

    };
    [self.navigationController pushViewController:secondVC animated:YES];
    [secondVC release];


解決block循環引用
//  解決Block循環引用的方法
//  相當於 block塊中 引用計數會被加一  
//  加上__block修飾後 有一個引用計數減1的操作   
//  ARC狀態下使用__weak   
//  MRC狀態下使用__block
   
// 需要用__block修飾一下self來解決問題   
     __block SecondViewController *myself = self;
  
     //  block的實現   
     view.block = ^void(){       
            [myself.navigationController popViewControllerAnimated:YES];                          NSLog(@"我來到了secondVC中");   
     };


block釋放(dealloc方法)

- (void)dealloc{   
       Block_release(_passValueBlock);     
       NSLog(@"我是secondVC,我被釋放了");   
       [super dealloc];
}



發佈了32 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章