美文网首页
代理,通知,Block

代理,通知,Block

作者: 雷3雷 | 来源:发表于2018-09-13 18:46 被阅读6次

1.三者的传值对应关系。

我们说通知是”一对多”的关系。

而代理和Block通常是”一对一”的关系。

Block的对应关系与代理机制一样,Block更为灵活。

2.通知的释放问题。

我们都知道,通知和定时器,我们需要手动释放,否则会造成内存泄漏,我们看到网上有说通知的释放可以在dealloc方法中进行释放,这个是没有错的,但是在实际的开发中,我们在不同的实际需求,释放的方法是不一样的。

例如:现在A界面是在不断的接受通知。此时A跳到B界面,而在B界面中不需要A通知的事件,如果在A界面中将通知的释放写在dealloc中,跳到B界面,不会执行A界面中的dealloc方法。所以A界面仍然不断的接收着消息。所以这种需求,就应该讲A中的通知释放写在viewDidDisapper方法中。

3.代理和Blcok的修饰关键字

(1)代理的修饰词用weak关键字,为什么不能用strong呢?

答:因为,代理方会强行持有代理属性,而此时代理属性用strong的话,会造成循环引用。用weak解循环

(2)那代理为什么不用assgin关键字呢?

答:因为weak修饰的对象,在释放的时候会被置为nil,而oc向nil发送消息是没问题的,但是用assign就会造成野指针的错误unrecongnized selected send to instance.

(3)为什么Block用copy 关键字?

答:Block在没有使用外部变量时,内存存在全局区,然而,当Block在使用外部变量的时候,内存是存在于栈区,当Block copy之后,是存在堆区的。知道了这些之后,就不难解释为什么Block要用copy修饰,因为存在于栈区的特点是对象随时有可能被销毁,一旦销毁在调用的时候,就会造成系统的崩溃。所以Block要用copy关键字。

4.代理和Block的效率对比。

通过两者关键字的比较,Block的效率会低于代理,因为Block要做栈堆的拷贝。

5.两者对事件的处理对比。

代理更加注重事件的过程,而Block更注重事件处理的结果。

6.使用两者的情形。

在多消息传递的时候,使用代理更清晰,而Block显得不直观也不易维护。

如果委托方向调用多个代理对象的时候,使用Block。因为一个委托对象的代理属性只有一个(weak修饰)。代理修改的是代理本身。

大多数情况下编译器会进行判断,自动生成将Block从栈上复制到堆上的代码,以下几种情况栈上的Block会自动复制到堆上:

调用Block的copy方法

将Block作为函数返回值时

将Block赋值给__strong修改的变量时

向Cocoa框架含有usingBlock的方法或者GCD的API传递Block参数

相关文章

  • iOS 逆向传值

    代理(delegate)、通知(NSNotification),block等等。 1、委托代理delegate只能...

  • 代理/通知/block

    一:通知(NSNotification) 1.通知的发布 2.通知的监听 3.通知的移除 通知的监听需要在发布之前...

  • 代理,通知,Block

    1.三者的传值对应关系。 我们说通知是”一对多”的关系。 而代理和Block通常是”一对一”的关系。 Block的...

  • 通知,Block,代理

    OC中经常要用到一些事件和参数的传递,通常有三种做法:通知 代理 Block 通知可以一对多,代理 通知 Blo...

  • 通知、代理、block

    通知、代理、block 是iOS中的三大回调方式。 通知 NSNotificationCenter,它就像一个广播...

  • 代理,通知,block

    代理的使用: 代理是一对一.首先要在需要传递值的类中声明一个协议 在这个类中定义一个delegate的属性,谁是它...

  • 通知、代理、block

    通知、代理、block 是iOS中的三大回调方式。 通知 NSNotificationCenter,它就像一个广播...

  • 关于反向传值(block,代理,通知)

    5种反向传值的方式 通知 代理 block

  • iOS 传值方式

    1,从前向后传值:属性传值 2, 从后向前传值: block、 代理、 通知 结论1, block、 代理 传值用...

  • Swift 快速生成代码

    控制器: 视图: Block(闭包): Protocol(代理): NotificationCenter(通知):...

网友评论

      本文标题:代理,通知,Block

      本文链接:https://www.haomeiwen.com/subject/scdnqftx.html