用Block 进行pop和传值
来源:互联网 发布:知乎 感情 精华贴 编辑:程序博客网 时间:2024/06/05 13:27
pop
在SecVC(由RootVC push而来) 中创建一个TouchView类 继承于UIView 点击TouchView SecVC实现pop
1.给block函数类型重命名
typedef void(^MyBlock)();
2.将MyBlock设置成属性
@property (nonatomic, copy) MyBlock block;
3.重写dealloc方法
- (void)dealloc{ // block属性的释放方式 Block_release(_block); [super dealloc];}
4.点击View控件 实现页面pop
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ self.block(); NSLog(@"还能打出来");}
5.在SecVC中实现block方法
// TouchView的对象是创建在SecVC中的 SecVC一旦被pop 那么它的内存空间会释放 但此时它的子视图 也就是TouchView的实例对象的touchBegan方法还没有执行完 这样会引起崩溃 所以系统将block实现中的self.retainCount +1 于是编译器会继续跳转到touchBegan方法中 所以SecVC 和 TouchView 均无法被释放// 在这样的情况下需要有__block修饰的 SecViewController类指针指向self的内存空间 这样 等touchBegan方法执行完以后 系统会释放SecViewController __block SecViewController *mySelf = self; touchView.block = ^void (){ [mySelf.navigationController popViewControllerAnimated:YES]; };
传值
传值用于不同类中
1.需要传值的类创建重命名block函数类型
2.设置成属性
3.重写dealloc方法
4.在某个方法中调用block 参数处填写自身的某个值
5.在需要值的类中实现block 用传过来的参数给自身赋值 完成传值
传值不存在pop那个问题 因为被传值的类和传值类没有直接联系 不像TouchView是添加在SecVC上的
0 0
- 用Block 进行pop和传值
- iOS:使用block进行传值
- ios 利用Block进行两个页面传值
- 用 block 代替delegate传值和回调
- block揭秘-用block进行回调
- oc block 传值和协议
- 云服务器Windows Server2012 配置SMPT和POP邮件服务器并进行邮件发送
- block的属性传值和 block的方法传值 代码示例
- pop和smtp配置
- python pop 和remove
- push和pop
- push和pop
- pushviewcontroller和pop
- python pop()和remove()
- 区分pop()和poll()
- iOS学习-初学者如何使用块(Block)进行传值
- Block传值和传值之间的注意事项
- #pragma warning( pop ) 和#pragma warning( push )有什么用
- 链表反转的几种形式
- HDU 5583 Kingdom of Black and White(依旧是暴力)——2015ACM/ICPC亚洲区上海站
- 软件测试基础题
- 《如何高效学习》读书笔记
- Oracle程序包
- 用Block 进行pop和传值
- Android开源BezierView:仿QQ未读消息99+条的红色气泡
- 网页设计心得报告(1)by ksy
- Mac系统 unity VScode 开发
- 手动安装liberty版本openstack环境(allinone)---安装keystone
- 1004-动态规划
- 《火星救援》中的科学与不科学
- [晋飞扬][茗润堂]5pt; FONT-W
- DOS下的复制与粘贴