/***********************************************/
在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...
- 开学已经是第二周了,一年级的”小豆包”们开始适应了小学生活,可是他们多少都有点自我,该怎样让他们快速融入集体中去哪...