iOS block的簡單使用

2016-07-21 16_31_43.gif

本人用block比較少,可以說是幾乎沒怎么用過,但是最近發(fā)現(xiàn)block也挺好用的,所以決定重溫一下關于block 的知識,也在實際開發(fā)中用到了,今天總結一下block的簡單使用。


A界面跳轉到B界面,把B界面的輸入值傳給A界面顯示出來。

B界面

第一種方式

B界面.h文件

#import <UIKit/UIKit.h>
typedef void (^MyBlock)(NSString *title);
@interface BViewController : UIViewController
@property (copy, nonatomic) MyBlock myblock;
@end

B界面.m文件

- (void)quedingBtn:(id)sender 
{
    self.myblock(self.testTextField.text);
    [self.navigationController popViewControllerAnimated:YES];
}

第二種方式

B界面.h文件

#import <UIKit/UIKit.h>
@interface BViewController : UIViewController
@property (copy, nonatomic) void (^MyBlock)(NSString *title);
@end

B界面.m文件

- (void)quedingBtn:(id)sender
{
    self.MyBlock(self.testTextField.text);
    [self.navigationController popViewControllerAnimated:YES];
}

A界面

第一種方式

- (IBAction)tiaozhuanBtn:(id)sender {
    __weak ViewController *weakSelf = self;
    BViewController *view = [[BViewController alloc] init];
    view.myblock = ^(NSString *title){
        weakSelf.titleLab.text = title;
    };
    [self.navigationController pushViewController:view animated:YES];

}

第二種方式

- (IBAction)tiaozhuanBtn:(id)sender {
     __weak ViewController *weakSelf = self;
    BViewController *view = [[BViewController alloc] init];
    view.MyBlock = ^(NSString *title){
        weakSelf.titleLab.text = title;
    };
    [self.navigationController pushViewController:view animated:YES];
}

這里需要注意block循環(huán)引用的問題,__weak修飾符定義一個變量來替換self,這樣就可以解決block 中用self導致的循環(huán)引用,避免內(nèi)存泄漏。

 __weak ViewController *weakSelf = self;

block也可以在聲明方法的時候用到,舉個例子:

.h中聲明

- (void)textblock:(void (^)(NSString *title))my block;

.m中實現(xiàn)

- (void)textblock:(void (^)(NSString *))myblock
{
    myblock(self.testTextField.text);
}

.m中調(diào)用

- (void)quedingBtn:(id)sender {
    [self textblock:^(NSString *title) {
        NSLog(@"%@",title);
    }];
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容