iOS学习笔记-block、代理、通知

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.通知

功能:多对多消息传递。

你可能感兴趣的:(iOS学习笔记-block、代理、通知)