1.block
功能:一对一消息传递,是一个对象。
优点:代码可读性好,可直接在一个对象中实现;是一种轻量级回调,可以直接访问上下文,代码是内联的,运行效率更高;使用起来灵活。
缺点:运行成本高,block出栈需要将使用的数据从栈内存拷贝到堆内存;容易造成循环引用。
block分类
1.1.全局静态block,不会访问任何外部变量,执行完就销毁
^{
NSLog(@"Hello World!");
}();
1.2.保存在栈中的block,当函数返回时会被销毁,和第一种区别就是调用了外部变量
[UIView animateWithDuration:3 animations:^{
self.view.backgroundColor = [UIColor redColor];
}];
1.3.保存在堆中的block,当引用计数为0时会被销毁。
例如按钮的点击事件,一直存在,即使执行过,也不会被销毁,因为按钮有可能还会被点击,知道持有按钮的View被销毁,它才会被销毁
- (IBAction)buttonClick:(id)sender {
if (self.buttonClickBlcok) {
self.buttonClickBlcok();
}
}
2.代理
功能:一对一消息传递,是一种设计模式。
优点:运行成本低,只保存了一个对象指针,直接回调,没有额外消耗,不会造成循环引用(week修饰),适用于回调很频繁的情况。
缺点:代码可读性差,使用起来比较麻烦,需要声明协议、声明代理属性、遵守协议、实现协议方法等。
3.通知
功能:多对多消息传递。
网友评论