使用Block需注意的问题
来源:互联网 发布:办公软件培训学校 编辑:程序博客网 时间:2024/04/30 07:15
1、block中引用外部变量
block中引用外部变量时,通常会把对象当做常量变量编码到block中,并且在block中尝试改变外部变量的值会报错,解决办法是引入__block标识符,需要在block内部修改的变量标识为__block scope
2、block自身的内存管理
block本身是像对象一样可以retain,和release。但是,block在创建的时候,它的内存是分配在栈(stack)上,而不是在堆(heap)上。他本身的作于域是属于创建时候的作用域,一旦在创建时候的作用域外面调用block将导致程序崩溃。解决的方法就是在创建完block的时候需要调用copy的方法。copy会把block从栈上移动到堆上,那么就可以在其他地方使用这个block了:_block = [_blockcopy];
3、循环引用
在block创建中:_block = ^( ) { NSLog:(@“string %@“,_string ) }; _string是成员变量
这里的_string相当于是self->_string;那么block是会对内部的对象进行一次retain。也就是说,self会被retain一次。当self释放的时候,需要block释放后才会对self进行释放,但是block的释放又需要等self的dealloc中才会释放。如此一来变形成了循环引用,导致内存泄露。修改方案是新建一个__block scope的局部变量,并把self赋值给它,而在block内部则使用这个局部变量来进行取值。因为__block标记的变量是不会被自动retain的。
__block ViewController *controller = self;
_block = ^(){NSLog(@"string %@", controller->_string); };
0 0
- 使用Block需注意的问题
- Block使用的注意
- 04-Block的使用注意
- 注意block中变量捕捉的问题
- 使用block的一些注意点
- 关于block使用需要注意的地方
- 使用block应该注意的事项
- iOS中block的使用注意
- OC中block的使用及注意
- block使用注意
- Block使用注意点
- iOS Block使用注意
- 使用block遇到的问题
- Block的注意点
- iOS-Block使用注意点
- 使用XStream需注意的问题
- 指针使用需注意的问题
- 使用XStream需注意的问题
- iOS 推送证书的配置 从cer证书到pem文件
- android中invalidate()的自动清屏含义以及屏幕刷新
- 【Android基础】Android开发键盘把底部导航顶上去了解决办法
- 分享一个jquery插件-poshytip(模仿显示微博人的图像)
- CSS 相对|绝对(relative/absolute)
- 使用Block需注意的问题
- Android开发之Intent.Action
- Spring中整合Xfire发布webservice服务
- mysqli 批量执行多条语句
- Linux操作系统基础 Intel32位系统架构总览
- 初识安卓基本控件_tablelayout
- cmake命令用法整理list命令
- cookie存入中文报错出现问题
- python 日期处理(日期间间隔时间)