iOS中block循环引用问题
2024-10-15 10:37:24
1、block是控制器对象的一个属性,则在block内部使用self将会引起循环应用
typedef void(^TestBlock)();
@interface SecondViewController ()
@property (nonatomic, copy)TestBlock testBlock;
@end self.testBlock = ^()
{
NSLog(@"%@",self.mapView);
};
self.testBlock();
2、把block内部抽出一个作为self的方法,当使用weakSelf调用这个方法,并且这个方法里有self的属性,block不会造成内存泄露
self.testBlock = ^()
{
[weakSelf test];
};
-(void)test
{
NSLog(@"%@",self.mapView);
}
3、当block不是self的属性时,block内部使用self也不会造成内存泄露
TestBlock testBlock = ^()
{
NSLog(@"%@",self.mapView);
};
[self test:testBlock];
4、当使用方法有block作为参数使用时,block内部使用self也不会造成内存泄露
- (void)viewDidLoad {
[super viewDidLoad]; [self getData:^(NSString *str){
NSLog(@"%@----%@", self, str);
}]; [[self class] getData:^(NSString *str) {
NSLog(@"类方法--%@---%@", self, str);
}];
} - (void)getData:(SuccessBlock)success{
if (success) {
success(@"success");
}
}
+ (void)getData:(SuccessBlock)success{
if (success) {
success(@"success");
}
}
最新文章
- MVC中得到成员元数据的Description特性描述信息公用方法
- NFC读写实例
- JS设置cookie
- jspSmartUpload上传下载全攻略
- C++使用VARIANT实现二维数组的操作
- javascript 数据类型 变量 类型转换运算符
- Python性能优化的20条建议 (转载)
- 帮哥们做的一个整理文档的小工具(C++ string的标准函数还是很给力的,代码在最下)
- openstack kilo 流量
- Tomcat Server Locations
- QML中多样化的ListModel(MultiDelegate)
- 我从现象中学到的CSS
- Python——网络爬虫
- VueI18n插件的简单应用于国际化
- MySQL 必知必会学习笔记
- 移动端自适应布局 rem方案
- Jersey 2.x JDK 上的客户端应用
- 【转载】Android Bug分析系列:第三方平台安装app启动后,home键回到桌面后点击app启动时会再次启动入口类bug的原因剖析
- (Python)numpy的argmax用法
- cxf之org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'cxf' available
热门文章
- docker容器下tomcat 不向catalina.out输出日志解决以及支持中文字符集
- Python中 __init__的通俗解释?附修饰器contextmanager的理解
- (四)Lua脚本语言入门(数组遍历)
- [浅谈CSS核心概念] CSS元素类型和盒模型
- 批量下载,多文件压缩打包zip下载
- 添加mysqld、apache服务到windows服务
- word导入导出自定义属性列表
- 相亲神器记录Swift1.2
- 基于Python自动发送QQ群消息
- Linux线程的信号量同步