ios - block循环引用Demo示例
2016-05-04 00:18
671 查看
当实例变量中有了block属性,并且用copy来修饰,但是当调用block中的代码的时候,如果block中运用了self.属性的时候回造成循环引用.
// // ViewController.h // block循环引用 // // Created by 裴波波 on 16/5/3. // Copyright © 2016年 裴波波. All rights reserved. // #import <UIKit/UIKit.h> /** 定义一个block的类 */ typedef int(^PBlcok)(int a,int b); @interface ViewController : UIViewController /** 属性中含有PBlcok类型的block */ @property (nonatomic, copy) PBlcok block; @property (nonatomic, copy) NSString *name; @end
.m中
// // ViewController.m // block循环引用 // // Created by 裴波波 on 16/5/3. // Copyright © 2016年 裴波波. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ /** 用__weak修饰self避免循环引用 */ //只要你在block内部使用了self所拥有的任何东西,例如属性,都会造成循环引用 __weak typeof(self) weakself = self; self.block = ^(int a,int b){ weakself.name = @"pbb"; NSLog(@"%d",a + b); return a + b; }; self.block(2,3); } - (void)viewDidLoad { [super viewDidLoad]; } @end
block被copy后,内部出现self则会对其强引用.ARC下用__weak来解决,MRC下用__block来解决
Demo地址 : https://github.com/adampei/CycleReference.git
相关文章推荐
- iOS常用定时器
- IOS自适配利器Masonry使用指南
- 成熟的夜间模式解决方案
- iOS开发简单高效的数据存储
- iOS开发之FMDB的是本使用
- iOS中KeyChain用途
- iOS开发学习之关键字Typedef的用法详解
- iOS开发第三方框架之AFNetworking3.0的使用
- IOS开发基础知识--碎片38
- iOS9的一些新的关键字
- ios中的视频播放
- ios开发学习笔记--数据持久化之归档解档(NSKeyedArchiver/ NSKeyedUnarchiver)
- ios ---数组去重
- iOS 开发中的消息机制-代理、通知、block
- iOS编译FFmpeg、kxmovie实现视频播放
- iOS category内部实现原理
- iOS延迟关闭
- IOS杂记
- iOS iPhone屏幕尺寸、分辨率及适配
- iOS 数组学习