关于块对象(block),以前大都用来代替Delegate来完成一些事情。所以,一直没怎么注意。
但是最近发现确实很有用,所以写个Demo,发上来,大家共鉴。
使用方法分好多种,常用的示例大体如下:
测试结果输出:
此外,稍做说明。block本质是代码块(对象)的指针,所以需要进行内存管理的,这个demo没有处理。其管理方式和普通的对象内存管理基本相同。例如,做属性得时候,注意dealloc中得release。
Block做筛选器
关于Block做筛选器,文档上说是并行的,速度会快。写了个demo,确实速度有所提高。
一下是一个Block做筛选器的Demo,求2-20000间素数。相同得算法,block会快很多。
测试代码:
结果如下:
注,因为for中各block是并行
的,所以就要考虑到互斥锁
的问题。所以,应当将对result得操作放在block内,加锁@synchronized
(result){xxoo}。
还有,内存管理没做,如果要使用block得时候,请注意这些细节。
##(续)今天补上系统一点的使用方法:
b. 声明Block(不声名类型),那么只能有一个定义
方法执行的时候传入,并保持(直接等于);
在合适的时候调用,用完记得release
(例,在dealloc里)。
-
注意事项
- void可省;
- 声明时,形参可省;
- 内存管理:
blcok默认是创建在
栈
中而不是堆中,所以要通过copy
移动到堆中以保持,用完之后记得release
。
block会默认保持引用的外部变量(比如self),为了防止循环引用而死锁,引用而不保持的变量应该加__block
标识,例如: