OC代理

作者: mikey_Jiang | 来源:发表于2020-12-14 11:23 被阅读0次

代理模式是一种消息传递方式, 一个完整的代理包括:委托对象,代理对象和协议.

a. 协议:用来指定代理双方可以做什么, 必须做什么

b. 委托对象:根据协议指定代理对象需要完成的事, 即调用协议中的方法.

c. 代理对象:根据协议实现委托对象需要完成的事, 即实现协议中的方法.

代理属性使用weak

a. 原因:我们在UITableViewController中, 控制器的view就是UITableView, 这就相当于UITableViewController强引用着UITableView(代理对象).

而当我们设置delegate的时候, 一般都是让UITableViewController成为代理, 这个时候如果代理也使用strong, 就会导致循环引用, 因此代理得用weak.

b. 为什么不用assign

weak和assign是一种"非拥有关系"的指针, 通过这两种修饰符修饰的指针变量都不会改变被引用对象的引用计数. 但是在一个对象被释放后, weak会自动将指针置nil, 而assign不会. 在OC中, 向nil发送消息是不会导致崩溃的, 而assign会导致野指针错误 unrecognized selector sent to instance

代理与block对比

a. 有多个消息传递时, 用delegate实现更合适, 更清晰. block就比较臃肿, 别扭.

b. 从设计模式的角度来说, 代理更加面向过程, block则更加面向结果.

c. 性能上来说, block性能消耗略大于delegate, 因为block涉及到栈区向堆区拷贝等操作, 时间和空间上的消耗都大于代理. 而代理只是定义了一个方法列表, 在遵守协议的对象的objc_protocol_list中添加一个节点, 在运行时向遵守协议的对象发送消息即刻.

相关文章

  • OC、swift混编中的反向传值

    一 OC向swift传值 1) 代理 1.1在oc中创建 代理 #import @protocolSecon...

  • iOS delegate为什么用weak,而不用strong/a

    什么是代理? iOS开发,OC是常用开发语言,但是OC仅仅是单继承,但是我们可以用代理来替代,那么什么是代理呢? ...

  • oc 代理

    最近一直在研究RN慢慢接触到了元素,开始学习oc总听别人讲代理。 是代理商的代理么 对。就是这个代理 做过js...

  • OC代理

    A --- Delegate的设计步骤 1、委托方制订一套协议(在委托方的.h文件中),协议中声明委托方需要让代理...

  • OC代理

    代理模式是一种消息传递方式, 一个完整的代理包括:委托对象,代理对象和协议. a. 协议:用来指定代理双方可以做什...

  • WKWebView与OC交互

    加载本地H5 设置useContent WKScriptMessageHandler代理方法 js调用oc oc注...

  • OC中调用swift的代理

    swift中代理的声明: OC中的实现:

  • iOS中 wkwebView与js 简单交互

    iOS 代码 js调用OC 方法 1、添加方法 2、接收js调用oc 的代理方法 3、移除js的监听方法 oc调用...

  • OC和JS的交互那点事

    1、OC调用JS代码 在代理方法webViewDidFinishLoad:方法中调用JS代码 2、JS调用OC代码...

  • Swift 代理

    Swift中的代理和OC中的差不多1, 声明代理 2, 设置变量 3, 调用代理方法 4, 注册代理 5, 实现代...

网友评论

      本文标题:OC代理

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