美文网首页
Block、协议、通知

Block、协议、通知

作者: Dove_Q | 来源:发表于2016-09-21 17:10 被阅读30次

Block

注: 将闭包放到自己成员函数内部,防止出现循环引用

CustomView.h文件

@interface CustomView : UIView
- (void)demoFunc:(void(^)(void))handle;
@end

CustomView.m文件

@interface CustomView ()
{
    void (^globalHandle)(void);
}
@end

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    if(globalHandle){
        globalHandle();
    }
}

- (void)demoFunc:(void (^)(void))handle{

    globalHandle = handle;
}

ViewController

    CustomView *v = [[CustomView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
    v.center = self.view.center;
    [self.view addSubview:v];
    v.backgroundColor = [UIColor redColor];

    [v demoFunc:^{
        
        NSLog(@"hello world");
    }];

协议

Custom.h文件

@protocol CustomViewDelegate <NSObject>
@optional
- (void)messageSend;
@end

@property (nonatomic,weak)id<CustomViewDelegate> delegate;

Custom.m文件

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    if([self.delegate respondsToSelector:@selector(messageSend)]){
        [self.delegate messageSend];
    }
}

ViewController

{
    CustomView *v = [[CustomView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
    v.center = self.view.center;
    [self.view addSubview:v];
    v.backgroundColor = [UIColor redColor];
    v.delegate = self;
}
- (void)messageSend{

    NSLog(@"hello world_delegate");
} 

通知

注: 通知一般用于一对多,当(1)里面的代码比较多的时候,会影响(2)后面代码的执行

Custom.m文件

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    [[NSNotificationCenter defaultCenter]postNotificationName:@"kClicked" object:nil];
    //(2)
}

ViewController

{
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notiHandle:) name:@"kClicked" object:nil];
}

- (void)notiHandle:(NSNotification*)noti{
    // (1)
    NSLog(@"hello world_noti");
    sleep(3);
}

相关文章

  • Block、协议、通知

    Block 注: 将闭包放到自己成员函数内部,防止出现循环引用 CustomView.h文件 CustomView...

  • 9.21 Block、协议、通知

    Block 注: 将时机放到自己成员函数内部,防止出现循环引用 CustomView.h文件 CustomView...

  • Block的使用

    Block的介绍 对象与对象之间的通信方式代理-协议,通知,Block。三种通信方式都实现了对象之间的解耦合。通知...

  • Blcok的使用

    Block介绍 对象与对象之间的通信方式 代理-协议,通知,Block。 三种通信方式都实现了对象之间的解耦合。 ...

  • iOS--Block块

    一、block的应用场景 1、对象与对象之间的通信方式 1)代理-协议,1对1 2)通知,1对多 3)block,...

  • OC 底层(KVC、KVO、Delegate、Category、

    目录 1.KVC2.KVO3.通知4.代理、委托、协议5.Block、KVO、通知、代理之间的区别6.分类 Cat...

  • 协议传值,block 传值,通知中心

    协议传值六个步骤: 第一步:在第二个页面的.h文件中声明一个协议,并且声明一个协议方法 第二步:添加代理人属性,在...

  • iOS 界面传值 Block,属性,协议,通知

    一、属性传值(只能由第一页传到下一页) 1、先在要推出的页面里定义一个属性,接收第一页的内容; 2、然后在将你定义...

  • KVC、Block块、协议(delegate)和通知中心(Not

    一、KVC的传值 : KVC也就是key-value-coding(键值编码),简而言之就是通过key值去进行赋值...

  • 给通知和KVO添加block实现

    给通知和KVO添加block实现 给通知添加block的实现 创建NSObject分类并创建分类方法(带通知名参数...

网友评论

      本文标题:Block、协议、通知

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