Block传值和传值之间的注意事项

Block传值一般用在从后往前传值.

步骤:

1.在第二个页面设置一个block属性,

2.在第二个页面的相应位置调用该block属性,调用函数

3.在第一个页面展开此block方法

注意:一般用typedef给block属性起个别名

主要代码:(将第二个页面的输入框中的内容传给第一个页面的输入框,显示出来)

第二个页面的.h文件中声明

#pragma mark----------为block变量起别名
typedef void(^passValueBlock)(NSString *);

#pragma mark--------声明block变量
@property(nonatomic,strong) passValueBlock passValueBlock;

第二个页面的.m文件中调用

#pragma mark------------使用模态调回到第一个视图控制器
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    
    
    
#pragma mark----------执行block
    
    //执行block
    self.passValueBlock(self.textField.text);
    
    
    //__weak typeof(self) temp = self;
  
     [self dismissViewControllerAnimated:YES completion:nil];
    
}

在第一个页面的.m文件中展开此方法(执行)

#pragma mark----------展开block
    //展开block
    customVC.passValueBlock = ^(NSString *text){
        self.label.text = text;
    };


使用Block传值的注意事项


#warning 注意:使用block传值的注意事项
//MRC
//1.block声明为属性的时候要使用copy语义(要将从栈区拷贝到堆区,retain无效,即retain和assign会造成野指针问题,因为栈内存系统自动回收,指向的内容不可控)
//2.block释放的时候要使用专有的Block_release(<#...#>)(block区别于向内存静态申请空间(+alloc)的OC普通对象,不符合常规内存管理)
//3.在block实现部分,必须使用__block来修饰实例变量、self。(block会持有其内部变量,导致引用计数+1)

//ARC
//1.block声明为属性的时候要使用strong语义,strong会自动将block拷贝一份到堆区
//2.在block实现部分,必须使用__weak来修饰实例变量、self。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值