objective c: block使用感受分享

2012-09-09 20:20:23 +08:00
 myrual
最近在异步编程的时候大量的使用了block,在设计异步处理的lib函数的时候也开始使用block。
带来的好处是明显的:

* 设计lib函数的时候只需要确定自己的输入,输出,不用设计delegate,也不用迁就使用者设计特别的回调参数。
* 使用lib函数的时候,所有的与这次调用相关的代码都在一个地方,不会分散在不同的位置。
* 当某个业务需要多个异步处理才能完成的时候,代码逻辑异常的简单。

缺点:

* block还是一个新概念,很多人不熟悉。
* 写一个基于block的lib函数比基于run loop的麻烦很多,我总要翻翻apple的文档才写的出来。
4414 次点击
所在节点    iDev
12 条回复
qlqsh
2012-09-09 21:14:46 +08:00
block用的不多,还没到lib的级别,惭愧。。。
ydhydh
2012-09-09 22:09:39 +08:00
block 要注意下循环引用,其他还好
推荐看下这里的文章: http://www.mikeash.com/pyblog/?tag=blocks
fly2never
2012-09-09 22:52:41 +08:00
我觉得最大的好处就是共享函数状态变量,不用回调传一大堆参数
myrual
2012-09-09 23:19:57 +08:00
@fly2never YES!
virushuo
2012-09-09 23:22:59 +08:00
@myrual 共享状态变量只能算是闭包的好处。block的好处要连着GCD一起来看,这样才能理解整个资源分配的思路。
myrual
2012-09-09 23:35:52 +08:00
@virushuo GCD确实是一个很神奇的东西,应该说提供了完全另一种思路。
前几天有一个需求,一个小函数,需要隔一段时间反复做一些动作,结果是两种,要么指定时间内收到反馈,要么超时。我从c语言程序员的思路出发想到的方法是开线程,然后sleep。 后来发现objective C里面似乎木有sleep。那么用perform selector after delay 也可以。
实现完毕之后总觉得哪里觉得别扭,反复想了之后觉得用GCD的source timer就够了,逻辑简单,设计简单。 开两个gcd source timer就够了。
dingtianran
2012-09-10 13:04:59 +08:00
对 block+GCD的确可以为以后4核8核16核准备 会自然随着处理器并行计算能力增长而增长
ssword
2012-09-10 13:28:10 +08:00
记得objC的block有些坑需要注意,这篇文章讲的很好:

http://thirdcog.eu/pwcblocks/#arcblocks
Mutoo
2012-09-10 13:31:40 +08:00
为什么我看到GCD的第一反应是某Party
kejinlu
2012-09-10 13:50:30 +08:00
写Block有一点需要注意的就是循环引用问题 需要注意使用__block __weak 修饰
kejinlu
2012-09-10 13:51:40 +08:00
以前学习的时候记录过一点东西 http://geeklu.com/2012/01/block/
volCANo
2012-09-10 20:28:25 +08:00
GCD用起来,比thread比起来爽多了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/47311

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX