block

之前写的是第一次发,格式看着太别扭了,重新发

//block:从后一个页面向前一个页面传值;
//步骤:
//1.数据的发送方创建block属性; typedef block, 创建block属性;
//2.发送方定义一个方法,方法的参数是block类型, 方法的实现对block进行赋值;
//3.发送方在某个时刻, 执行block, 并进行数据传递;
//4.接收方,调用方法;

//注:block的属性用copy修饰, block创建在栈区, 为了保证block能够使用, copy将栈区的block拷贝到堆区;

传值页面.h

<span style="font-size:24px;">#import <UIKit/UIKit.h>
typedef void (^BlockType)(NSString *string);
@interface DetailViewController : UIViewController
//block写属性用copy;
//void (^)(NSString *string) 类型名;  blockName 参数名;
@property (nonatomic, copy) BlockType blockName;
- (IBAction)valueButton:(UIButton *)sender;
- (void)sendValue:(BlockType)aBlock;
@end</span>

传值页面.m

#import "DetailViewController.h"
#import "ViewController.h"


@interface DetailViewController ()

@end

@implementation DetailViewController
- (void)dealloc
{
    self.blockName = nil;
    [super dealloc];
}
- (IBAction)valueButton:(UIButton *)sender {
    //执行block
    _blockName(@"HelloWorld");
    //返回上一个界面;
    [self.navigationController popViewControllerAnimated:YES];
}
- (void)sendValue:(BlockType)aBlock{
    _blockName = aBlock;
}

被传值页面.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (retain, nonatomic) IBOutlet UILabel *valueLabel;

@end

被传值页面.m


#import "ViewController.h"
#import "DetailViewController.h"

@interface ViewController ()

@end

@implementation ViewController
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  DetailViewController *detailVC = (DetailViewController *)[segue destinationViewController];
    //block中不能够出现self, 会造成循环引用,
    //当在mrc(手动内存管理)下
    __block ViewController *blockSelf = self;
//    //当在arc(自动内存管理)下
//    __weak  ViewController *weakSelf = self;

    [detailVC sendValue:^(NSString *string) {
        NSLog(@"%@", string);
        blockSelf.valueLabel.text = string;
    }];
}
- (void)dealloc {
    [_valueLabel release];
    [super dealloc];
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值