Objective-C中的block以及block实现监听器思想
来源:互联网 发布:如何请人打理淘宝店 编辑:程序博客网 时间:2024/06/06 02:07
Block(代码段):
Block封装了一段代码,可以再任何时候执行
Block可以作为函数参数或者函数返回值
定义block方法一:
#import "Button.h"
void test(){
//^ 是block的标志 ,定义一个block返回值int类型,接受两个int类型的参数
int (^Sum) (int,int) = ^(int a, int b){
return a+b;
}
int a = Sum(10,11);
NSLog(@"%i", a);
}
int main(int argc , const char * argv[] ){
@autoreleasepool{
test();
}
}
定义block 方法二:
#import "Button.h"
typedef int (^MySum)(int, int );
void test2(){
__block int c = 15; //两个下划线
int t=20
//声明一个block 变量
MySum sum = ^(int a, int b){
NSLog(@"%i", t); //可以访问外面的变量,但是不能改变值
c = 25; //如果外部变量用了__block 关键字,就可以在block内部修改这个变量
return a+b;
};
NSLog(@"%i", sum(10,15));
}
int main(int argc , const char * argv[] ){
@autoreleasepool{
test2();
}
}
利用block实现监听器思想:
.m文件
#import "Button.h"
@implementation Button
-(void)click{
_block(self);
}
@end
.h文件
#import <Foundation/Foundation.h>
@class Button;
typedef void (^ButtonBlock) (Button * btn);
@interface Button : NSObject
@property (nonatomic, assign) ButtonBlock block;
-(void) click;
@end
main方法中运行
#import <Foundation/Foundation.h>
#import "Button.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Button * btn = [[[Button alloc] init] autorelease];
btn.block = ^(Button * btn){
NSLog(@"button %@ is clicked",btn);
};
[btn click];
}
return 0;
}
- Objective-C中的block以及block实现监听器思想
- Objective-C中的Block
- Objective-C中的Block
- Objective-C中的Block
- Objective-C中的Block
- Objective-C中的Block
- objective-c中的block
- Objective-C中的Block
- Objective-C中的Block
- Objective-C中的Block
- Objective-C中的Block
- Objective-C中的Block
- Objective-C中的Block
- Objective-C中的Block
- Objective-C中的Block
- Objective-C中的Block
- Objective-C中的Block
- Objective-C中的Block
- 使用ActivityGroup来切换Activity和Layout
- c排序算法总结
- HDU--1009 -- FatMouse' Trade
- Nginx配置文件(反向代理+动态流量控制)
- Object-c学习之路十一(NSDate和反射)
- Objective-C中的block以及block实现监听器思想
- pb函数库之其他函数
- [ oracle ] oracle之路1---user管理;
- 华为笔试题
- 第三章 最初的步骤
- IOS高级开发~Runtime(四)
- 飞思卡尔i.MX 6Quad Android 4.0.4的3G驱动移植
- Linux处理jpeg文件解决方案
- Oracle修改表结构