• 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
  • 相关阅读:
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    关于值类型与列类型不匹配,所需类型是 DataRow"的解决方案
    如何给excel设置密码
    Excel如何将大写字符转化为小写
    C#调用WebService(服务引用-xml)
  • 原文地址:https://www.cnblogs.com/jiangdaohong/p/4596890.html
Copyright © 2020-2023  润新知