/***********************************************/
在ViewController.m 中代码如下
@implementation ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self presentView];
}
-(void)presentView{
//创建控制器
ModalViewController *modalVC=[[ModalViewController alloc] init];
modalVC.view.backgroundColor=[UIColor cyanColor];
//modal 到上面创建的控制器
[self presentViewController:modalVC animated:YES completion:nil];
}
- (void)viewDidLoad {
[super viewDidLoad];
//设置颜色方便自己点击
self.view.backgroundColor=[UIColor cyanColor];
}
@end
/***********************************************/
Block 的概念
堆立面的block(被copy过的block)有以下现象
1==> block内部如果通过外面声明的强引用来使用,那么block内部会自动产生一个强引用指向所使用的对象。
2==> block内部如果通过外面声明的弱引用来使用,那么block内部会自动产生一个弱引用指向所使用的对象。
在ModalViewController.m 中代码如下
@interface ModalViewController ()
//声明block
@property(nonatomic,strong)void(^block)();
@end
@implementation ModalViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self dismissViewControllerAnimated:YES completion:nil];
}
-(void)dealloc{
NSLog(@"对象销毁");
}
- (void)viewDidLoad {
[super viewDidLoad];
//把self 由强转成弱的
__weak typeof(self) weakSelf=self;
self.block=^{
//self.block 复制一个 weakSelf 弱指针
NSLog(@"1111%@",weakSelf);
//这里启用 复制的弱指针 转化成 强指针 局部的,这里是新转化来的,不会被上面的block影响;
__strong typeof(weakSelf) strongSelf=weakSelf;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(),
^{
//转化成一个局部强指针 他就 复制强指针 [对象有强引用就不会被销毁,会执行到他释放]
//dispatch_after 复制一个 strongSelf 弱指针
NSLog(@"222==%@",strongSelf);
//如果不转化成一个局部强指针 那么他就 复制弱指针 [对象没被强引用就销毁]
//dispatch_after 复制一个 weakSelf 弱指针
//NSLog(@"333=%@",weakSelf);
});
};
self.block();
}
@end
Block 循环引用 深入之 __weak 和 __strong 的问题
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 关于使用__weak和__strong 大家都看到别人在block里面使用self或者self的属性的时候要使用_...
- 在ARC环境下,我们会使用_weak修饰符来修饰一个变量防止其在block中被循环引用,特殊情况下还会在block...
- 开学已经是第二周了,一年级的”小豆包”们开始适应了小学生活,可是他们多少都有点自我,该怎样让他们快速融入集体中去哪...