Block作监听器

2016-08-06  本文已影响27人  solozyx

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
上一篇下一篇

猜你喜欢

热点阅读