关于协议(protocol)、代理(delegate)、block、通知(NSNotification)、KVO

协议和代理:
①协议是一个方法列表,并且里面的方法多少是相关的
②协议中声明的方法默认是必须实现的,@required 当然还有选择实现的 @optional
③协议通常和代理(delegate)搭配使用,即协议声明需要实现的代理方法,代理去实现协议声明的方法
④代理是一对一的回调机制,代理对象实现协议对象,并且需要建立代理关系才能进行通信

协议在发出代理请求的类的.h文件中声明(有A类和B类两个类,A想让B帮忙做一些事情,则B就是A的代理,A来声明要做的事情,B来实现A所要求的事情),在代理类的.m文件中实现。

A.h
A.m
B.h
B.m

其中,A类.h文件中,@property(nonatomic,weak)id<FirstDelegate> delegate; 要使用weak修饰词,weak不会使引用计数+1,防止循环引用造成内存泄露。

Block:
①一对一的回调机制,更加简洁
②当回调时间比较多时,建议使用代理
③无论当前环境是ARC还是MRC,只要block没有访问外部变量,block始终在全局区
④在ARC情况下,block如果访问外部变量,block在堆里;block可以使用copy和strong,block是一个对象
⑤如果要在block中直接使用外部强指针会发生错误,使用以下代码在block外部实现可以解决
__weak typeof(self) weakSelf = self;
但是如果在block内部使用延时操作还使用弱指针的话会取不到该弱指针,该指针已经被销毁,需要在block内部再将弱指针强引用一下
__strong typeof(self) strongSelf = weakSelf;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,219评论 30 472
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 2,014评论 0 7
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,764评论 0 4
  • 后期剪辑/后期制作/影视后期/视频编辑/视频剪辑师 前言: 听到过不计其数的人说迷茫大多数人的做法是嘴上喊着迷茫,...
    朔马渔阳1阅读 1,248评论 0 1
  • 少女,你为何升起旗帜让思念寄托早风,向那方呼唤对着偶然相遇的乌鸦少女,今日也是红白色的以蓝色点缀的旗帜在翻动——虞...
    Super安浅浅阅读 4,002评论 81 73