协议和代理:
①协议是一个方法列表,并且里面的方法多少是相关的
②协议中声明的方法默认是必须实现的,@required 当然还有选择实现的 @optional
③协议通常和代理(delegate)搭配使用,即协议声明需要实现的代理方法,代理去实现协议声明的方法
④代理是一对一的回调机制,代理对象实现协议对象,并且需要建立代理关系才能进行通信
协议在发出代理请求的类的.h文件中声明(有A类和B类两个类,A想让B帮忙做一些事情,则B就是A的代理,A来声明要做的事情,B来实现A所要求的事情),在代理类的.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;