1.IOS中block基本demo
A视图->B视图,B视图传值给A视图
A视图的代码片段:
- (IBAction)action2OtherView:(id)sender
{
MyView *myView = [[MyView alloc] init];
myView.func = ^(int x,int y)
{
int xy = myView.number;
NSLog(@"xy->%d",xy);
[myView removeFromSuperview];
return 0;
};
[self.view addSubview: myView];
[myView release];
}
B视图:
.h文件:
@interface MyView : UIView
@property(assign,nonatomic) int number;
@property(copy,nonatomic) int (^func)(int x,int y);
@property(retain, nonatomic) UIButton* button;
@end
.m文件:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setFrame:CGRectMake(100, 100, 300, 200)];
self.backgroundColor = [UIColor yellowColor];
// Initialization code
self.number = 5;
self.button = [UIButton buttonWithType : UIButtonTypeRoundedRect];
[self.button setBackgroundColor : [UIColor blueColor]];
[self.button setFrame : CGRectMake(50, 50, 50, 50)];
[self.button addTarget:self action:@selector(showBack) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:self.button];
}
return self;
}
- (void) showBack
{
self.func(5,6);
}
- (void)dealloc
{
self.func = nil;
self.button = nil;
[super dealloc];
}
IOS中的block相当于是一个在堆上的代码内存块,是需要释放的
2.C++的纳姆大表达式相当于block的实现
A视图:
void MyView::pageSwitch()
{
SecondView* spSecondView = new SecondView;
spSecondView->func = [](int x, int y)
{
return x + y;
};
spSecondView->func(10, 20);
}
B视图:(一定要用functional去包装)
#ifndef __testBlockCPlusPlus__SecondView__
#define __testBlockCPlusPlus__SecondView__
#include <functional>
class SecondView
{
public:
SecondView(){};
virtual ~SecondView(){};
std::function<int(int, int)> func;
private:
int originX;
int originY;
};
c++中纳姆大表达式最坑爹的地方,栈对象的地址问题:
#include <iostream>
#include <functional>
void foo()
{
int a = 1;
int b = 2;
int c = 3;
f = [&]() {
cout << a << endl;
cout << b << endl;
cout << c << endl;
};
}
void bar()
{
int x = 10;
int y = 20;
int z = 30;
f();
x = y = z = 0;
}
int main()
{
foo();
bar();
return 0;
}