美文网首页
Block作监听器

Block作监听器

作者: solozyx | 来源:发表于2016-08-06 17:07 被阅读27次

    Button : NSObject

    Button.h

    //
    //  Button.h
    //  2-Block作监听器
    //
    //  Created by zhaoyingxin on 16/8/6.
    //  email zhaoyingxin@aliyun.com
    //
    
    #import <Foundation/Foundation.h>
    
    //定义按钮的监听器需要首先定义一个协议
    //想让block充当监听器首先也需要定义block,别人才知道block怎么写
    @class Button;
    typedef void (^ButtonBlock) (Button *btn);
    //形式参数的名称可以省略
    //typedef void (^ButtonBlock) (Button *);
    
    @interface Button : NSObject
    //对象类型 *obj
    //block 没有 *
    
    //严格的说block不能用assign
    //Block的内存管理比较奇怪 block的内存管理会涉及copy语法
    //用assign block自己会释放
    @property (nonatomic,assign) ButtonBlock block;
    
    //模拟点击按钮
    -(void)click;
    @end
    

    Button.m

    //
    //  Button.m
    //  2-Block作监听器
    //
    //  Created by zhaoyingxin on 16/8/6.
    //  email zhaoyingxin@aliyun.com
    //
    
    #import "Button.h"
    
    @implementation Button
    
    //按钮被点击要通知按钮的监听器我被点击这里通知block按钮被点击了
    //通知block就是调用block
    //@property在Xcode4.5的时候会自动帮我们生成一个_下划线对应的成员变量
    -(void)click{
        _block(self);
    }
    @end
    

    main.m

    //
    //  main.m
    //  2-Block作监听器
    //
    //  Created by zhaoyingxin on 16/8/6.
    //  email zhaoyingxin@aliyun.com
    //
    
    #import "Button.h"
    
    int main(int argc, char * argv[]) {
        @autoreleasepool {
            Button *btn = [[Button alloc] init];
            btn.block = ^(Button *btn){
                NSLog(@"Button 被点击了");
            };
            [btn click];
        }
        return 0;
    }
    

    运行代码:

    2016-08-06 17:13:48.634 2-Block作监听器[32162:459091] Button 被点击了
    Program ended with exit code: 0
    

    相关文章

      网友评论

          本文标题:Block作监听器

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