英语轻松读发新版了,欢迎下载、更新

oc中,“代码块”和“代理-协议”有什么区别吗?

freecunix 发布于 2013年09月10日
无人欣赏。

如何决定优先选择代码块还是代理-协议?他们之间有什么不同?

共14条回复
tinyfool 回复于 2013年09月10日

用英语词汇吧,我都不知道你说啥

Lithium 回复于 2013年09月10日

In Objective-C, what's the difference between "block" and "delegation protocol"? How can I chose between them?

友情翻译,不客气 @tinyfoll

tinyfool 回复于 2013年09月10日

楼上,我的名字都写不对么?

如果这个翻译对的话,楼主就问了一个毫无意义的问题,在什么情况下,你需要区分block和delegation protocol?这两个有啥可区分的?完全不同啊?

我很奇怪你问问题的方式,我们不应该先弄明白一个东西是什么,然后谈怎么跟别的东西区分么?具体到这两个东西,只要有点明白,就区分开了,因为完全没有关系啊。

Lithium 回复于 2013年09月10日

擦... 一手抖,把高超的英语水平泄露了!

ibuick 回复于 2013年09月10日

block delegate-protocol 根本就没啥关系啊,,,,

chenyu 回复于 2013年09月10日

哈哈@Lithium

freecunix 回复于 2013年09月10日

3楼 @tinyfool 回调,用delegation实现就没问题,用block就崩溃。。自己看了下,写在方法里的block是分配在栈上的,并且retain不起作用,block的isa指向的不是objectclass,而是NSConcreteStackBlock。retain这个函数在_NSConcreteStackBlock里好像不对指针起作用。。把block外传必须要copy一下,copy后block类型从NSStackBlock变为了NSMallocBlock,跑道堆上去就好了。。

thanks

cheng.seatt 回复于 2013年09月10日

为什么要把技术搞得这么复杂......

vikiliu0310 回复于 2013年09月10日

不明觉历啊~~

Lithium 回复于 2013年09月10日

我其实之前写过类似思路的东西,所以搬过来。

调了一整天关于block的bug,终于窥探到了一些GCD, Block,ARC的关系,简单来说,为了iOS的用户界面更加流畅,苹果推出了更加底层的GCD,GCD是更加底层的C级别接口,为了实现回调,且为了与Obj-C代码更加兼容,自然也提出了类似于C语言函数指针而非函数指针的Block,但是gcd线程结束的不确定性,使block在异步调用时内存管理逻辑会非常复杂,从这个角度来说,苹果又为clang编译器推出了ARC,让编译器帮助你管理各种release;另一方面,也降低了很多初学者的学习成本与门槛,一箭N雕。

你去看看12年还是11年的WWDC有一个session介绍ARC的,当时在讲block编程的时候就演示了一个例子,说明block的内存管理有时候会异常复杂,犯错的概率也非常高。所以我的结论是,用block,就用ARC。

我自己感觉的逻辑大概是这样,不知道@tinyfool @ibuick 大神们的意见如何?

freecunix 回复于 2013年09月10日

10楼 @Lithium 我用的一个第三方库,他用了block,但是没用arc。。 我的工程是arc的,我把他的代码都给-fno-objc-arc了。于是就碰到了这种block回调+内存的问题,真是挺麻烦的。我把一些地方改成delegation-protocol的方式了。

freecunix 回复于 2013年09月10日

10楼 @Lithium Thank you very much. :D

Lithium 回复于 2013年09月10日

@freecunix 不客气~

zedzhao 回复于 2013年09月11日

ARC下的block都是在堆里~~ 这里有个测试可以看一下。 http://blog.parse.com/2013/02/05/objective-c-blocks-quiz/

还有,block和delegate是没什么关系, 但是做回调使用的时候觉得最终实现的功能是一样的,有了block以后其实很多情况下使用block可以替代delegate~~,写起来方便很多。 不知道这样讲对不对 还有就是觉得block用的多的地方读起来感觉很吃力啊~~~不知道大神们有没有这样的感觉。 @ibuick @tinyfool

本帖有14个回复,因为您没有注册或者登录本站,所以,只能看到本帖的10条回复。如果想看到全部回复,请注册或者登录本站。

登录 或者 注册
[顶 楼]
|
|
[底 楼]
|
|
[首 页]