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