block

来源:互联网 发布:baocms 蜂蜜源码 编辑:程序博客网 时间:2024/05/08 07:08

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

//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];}


0 0
原创粉丝点击