V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
myrual
V2EX  ›  iDev

objective c: block使用感受分享

  •  
  •   myrual ·
    myrual · 2012-09-09 20:20:23 +08:00 · 4384 次点击
    这是一个创建于 4453 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在异步编程的时候大量的使用了block,在设计异步处理的lib函数的时候也开始使用block。
    带来的好处是明显的:

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

    缺点:

    * block还是一个新概念,很多人不熟悉。
    * 写一个基于block的lib函数比基于run loop的麻烦很多,我总要翻翻apple的文档才写的出来。
    12 条回复    1970-01-01 08:00:00 +08:00
    qlqsh
        1
    qlqsh  
       2012-09-09 21:14:46 +08:00
    block用的不多,还没到lib的级别,惭愧。。。
    ydhydh
        2
    ydhydh  
       2012-09-09 22:09:39 +08:00   ❤️ 1
    block 要注意下循环引用,其他还好
    推荐看下这里的文章: http://www.mikeash.com/pyblog/?tag=blocks
    fly2never
        3
    fly2never  
       2012-09-09 22:52:41 +08:00
    我觉得最大的好处就是共享函数状态变量,不用回调传一大堆参数
    myrual
        4
    myrual  
    OP
       2012-09-09 23:19:57 +08:00
    @fly2never YES!
    virushuo
        5
    virushuo  
       2012-09-09 23:22:59 +08:00
    @myrual 共享状态变量只能算是闭包的好处。block的好处要连着GCD一起来看,这样才能理解整个资源分配的思路。
    myrual
        6
    myrual  
    OP
       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
        7
    dingtianran  
       2012-09-10 13:04:59 +08:00
    对 block+GCD的确可以为以后4核8核16核准备 会自然随着处理器并行计算能力增长而增长
    ssword
        8
    ssword  
       2012-09-10 13:28:10 +08:00
    记得objC的block有些坑需要注意,这篇文章讲的很好:

    http://thirdcog.eu/pwcblocks/#arcblocks
    Mutoo
        9
    Mutoo  
       2012-09-10 13:31:40 +08:00
    为什么我看到GCD的第一反应是某Party
    kejinlu
        10
    kejinlu  
       2012-09-10 13:50:30 +08:00
    写Block有一点需要注意的就是循环引用问题 需要注意使用__block __weak 修饰
    kejinlu
        11
    kejinlu  
       2012-09-10 13:51:40 +08:00   ❤️ 1
    以前学习的时候记录过一点东西 http://geeklu.com/2012/01/block/
    volCANo
        12
    volCANo  
       2012-09-10 20:28:25 +08:00
    GCD用起来,比thread比起来爽多了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1041 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:30 · PVG 04:30 · LAX 12:30 · JFK 15:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.