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