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\n", 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\n", a); 23 }; 24 25 //重命名 26 typedef void(^Name)(int) ; 27 Name b = ^(int b) { 28 printf("%d\n", 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