Block是代码块,
Block定义
返回值 (^ 块名)(参数1,参数2…);
在定义Block的时候可以使用typedef 重命名一下。
typedef void(^blockName)(NSString *string);
Block和函数的相似性:
(1)可以保存代码
(2)有返回值
(3)有形参
(4)调用方式一样。
具体实现过程:
// SecondViewController.h
#import <UIKit/UIKit.h> typedef void(^blockName)(NSString *string); @interface SecondViewController : UIViewController @property (nonatomic, copy)blockName sendBlock; @end // SecondViewController.m
- (IBAction)actionTow:(id)sender {
self.sendBlock(self.textfile.text);
[self dismissViewControllerAnimated:YES completion:nil];
} // ViewController.m
#import "ViewController.h"
#import "SecondViewController.h" @interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *lable;
@property (strong, nonatomic)SecondViewController *secondVC; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.secondVC = [[SecondViewController alloc]init];
// ARC情况下解决循环引用的方式: _weak
__weak ViewController *weakThis = self;
self.secondVC.sendBlock = ^(NSString *string){
// 如果要访问属性 还要使用__strong 来修饰。
__strong ViewController *strongThis = weakThis;
strongThis.lable.text = string;
};
}
- (IBAction)actionOne:(id)sender {
[self presentViewController:self.secondVC animated:YES completion:nil];
}