__block typeof的说明
2024-10-01 21:02:45
1. block不是Object对象,所以对retain无效,要想保留block生命周期,最好通过copy来实现,当然copy后,要记得release。
2.一般被block的应用的对象,retainCount会自动加1,为了解决这种 retain的内存问题,可以在对象前加__block,如果不加会导致内存泄漏,导致程序直接崩溃。加了block块就不会维护这个对象了。
对临时变量的引用:
__block Object obj = [[[Object alloc] init] withBlock:^{
[obj blockRetain];
[obj release];
}]; 这样Object的dealloc方法就会调用。
对实例变量的引用:
Object obj =[[[Object alloc] init] withBlock:^{
[self blockRetain];
}];
这样即使调用的self自身类的release方法,只要这个block没有执行完,self也不会释放。可采用如下做法
__block typeof (self) bself = self; 即通过表达式引用,指明 bself 是self类型。
Object obj =[[[Object alloc] init] withBlock:^{
[bself blockRetain];
}];
这样块和self相互独立了。
最新文章
- Bootstrap_进度条
- .NET分布式事务--TransactionScop
- make_pair
- 【linux磁盘分区--格式化】fdisk,parted,mkfs.ext3
- River Hopscotch(二分)
- Blogger支持Mobile行动版网页 - Blog透视镜
- 【转载】Session的生命周期
- js创建数组
- Flutter的初体验--初次配置的问题
- java的线程
- 从字节码层面看“HelloWorld”
- IntelliJ Idea 跳出括号并且光标移到末尾的快捷键
- QCon技术干货:个推基于Docker和Kubernetes的微服务实践
- C++之可调用对象
- 微信小程序提示框
- C Primer Plus学习笔记(十三)- 结构和其他数据形式
- MFC 控件使用汇总
- 深度剖析MQTT协议的整个通信流程
- C#IList 取区间数据
- JAVA加解密 -- 数字签名算法