IOS block编程注意事项
来源:互联网 发布:阿里云国际版账号注册 编辑:程序博客网 时间:2024/06/11 01:17
原文地址:http://blog.csdn.net/sgl870927/article/details/8167034
block可以完全作为delegatge的替代品,而且使用简单,不需要写太多@protocol来定义接口。但使用有以下几点注意。
(1) block不是Object对象,所以对retain无效,要想保留block生命周期,最好通过copy来实现,当然copy后,要记得release。如果不想手动管理,就通过[[[testBlock] copy] autorelease]来管理。
(2)我们知道一般被block的应用的对象,retainCount会自动加一,为了打破这种 retain circle,可以在对象前加__block,这样block块就不会维护这个对象了。有两种情况
(1)对临时变量的引用如:A a =[ [[A alloc] init] withBlock:^{
[a action];
[ a release];
}];其实这样会导致内存泄漏,要打破这种circle,只需要在A前面加__block。在我的测试代码中,由于没有对A加__block 导致程序直接崩溃。
即
__block A a =[ [[A alloc] init] withBlock:^{
[a action];
[ a release];
}]; 这样A的dealloc方法就会调用
(2)对实例变量的引用如
A a =[ [[A alloc] init] withBlock:^{
[self action];
}];这样即使调用的self 自身类的release 方法,只要这个block没有执行完,self也不会释放。要打破这种可采用如下做法
__block typeof (self) bself = self; 即通过表达式引用,具体参考typeof用法 ,指明 bself 是self类型。
A a =[ [[A alloc] init] withBlock:^{
[bself action];
}];这样块和self相互独立了。
- IOS block编程注意事项
- IOS block编程注意事项
- IOS block编程注意事项
- iOS block使用注意事项
- iOS中block使用注意事项
- IOS-Block编程
- IOS-Block编程
- IOS 之Block编程
- Block编程总结【iOS】
- ios 自定义bolck以及block注意事项
- IOS block编程指南 2 block开始
- iOS编程------- Block高级------>Block传值
- IOS开发之Block编程
- IOS Block(块)编程初步
- 【转载】IOS block块编程
- IOS多线程之Block编程
- IOS开发之Block编程
- 【iOS开发系列】block编程
- 好饿啊
- 网页制作中CSS样式布局实用小技巧
- struts2.0 struts.xml配置详解
- 字符集校对规则collation
- Apache自动添加地址末尾的斜线
- IOS block编程注意事项
- JS实现JSP页面,鼠标禁止另存,复制,右键,选取
- python代码统计大文本文件行数
- HDU-1180 诡异的楼梯
- 北大ACM 1007题 感觉本人写的代码还可以 和大家分享下
- JAVA代码片段--获取当前是星期几
- unix基础篇
- Cocos2dx: 弹出对话框的设计与实现
- 设计模式总结