Block

 1 #import <UIKit/UIKit.h>
 2 /*
 3 //block,块语法,实质是匿名函数
 4 //block的定义 和 函数指针的定义 类似
 5 
 6 //函数声明
 7 void printHello(int a);
 8 
 9 //函数定义
10 void printHello(int a) {
11     printf("%d
", a);
12 }
13 
14 //函数指针定义
15 //void (*) (int)
16 
17 //定义一个函数指针变量
18 void (*p) (int) = printHello;
19 
20 //block定义
21 void (^name) (int) = ^(int a) {
22     printf("%d
", a);
23 };
24 
25 //重命名
26 typedef void(^Name)(int) ;
27 Name b = ^(int b) {
28     printf("%d
", b);
29 };
30 */
31 //block调用
32 //b(123);
33 
34 //delegate,用assign修饰,防止出现保留环(retain cycle),从而相互拥有对方,得不到释放;
35 
36 
37 
38 //block传值,和delegate一样,用于从 后一个页面 向 前一个页面 传值
39 
40 //1.写typedef,参数类型由你传递的值决定,参数的个数根据你传递的值的个数定
41 //2.写属性,类型是block类型,属性修饰符用copy,block定义的时候存放在栈区,使用copy可以把栈区的block存放堆区,从而保证block不会丢失
42 //3.找时刻,执行block
43 //4.定义一个方法,并且方法的参数类型是block类型,方便使用
44 
45 typedef void(^BlockViewControllerBlock) (NSString *string); // 注意,参数名不能够省略
46 
47 @interface BlockViewController : UIViewController
48 
49 @property (nonatomic, copy) BlockViewControllerBlock block;
50 
51 - (void)pressValue:(BlockViewControllerBlock)aBlock;
52 
53 @end

 1 #import "BlockViewController.h"
 2 
 3 @interface BlockViewController ()
 4 
 5 @end
 6 
 7 @implementation BlockViewController
 8 
 9 - (void)viewDidLoad {
10     [super viewDidLoad];
11     self.view.backgroundColor = [UIColor redColor];
12     UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
13     button.frame = CGRectMake(0, 0, 200, 200);
14     button.backgroundColor = [UIColor whiteColor];
15     [button setTitle:@"上一个页面" forState:UIControlStateNormal];
16     button.center = self.view.center;
17     [button addTarget:self action:@selector(pressButton) forControlEvents:UIControlEventTouchUpInside];
18     [self.view addSubview:button];
19 }
20 
21 //封装这个方法,是为了简化block的赋值,方便使用
22 - (void)pressValue:(BlockViewControllerBlock)aBlock {
23     self.block = aBlock;
24 }
25 
26 - (void) pressButton {
27     self.block(@"1253154156");
28     [self.navigationController popViewControllerAnimated:YES];
29 }
30  
31 @end
原文地址:https://www.cnblogs.com/jiangdaohong/p/4596890.html