mirror of
https://github.com/wu736139669/ASHBlockTest.git
synced 2026-08-05 05:55:33 +00:00
a709597700e1142c6c363eea71bb41580311ef3a
#block基础用法
1. block定义
//第一个int,block的返回值,addBlock block名称,,后面的两个int是传入的参数
int (^addBlock)(int, int) = ^(int num1, int num2){
return num1 + num2;
};
NSLog(@"相加值是:%d",addBlock(10,20));
//先声明,再实现
int (^mulBlock)(int, int);
mulBlock = ^(int num1, int num2){
return num1 * num2;
};
NSLog(@"相乘值是:%d",mulBlock(2,5));
2. 修改局部变量
###需要用到 __block 参数修饰
__block int num = 20;
void (^changeNum)(void) = ^(void){
num = 30;
};
NSLog(@"变化之前:%d",num);
changeNum();
NSLog(@"变化之后:%d",num);
3. block的调用
直接使用即可 NSLog(@"相乘值是:%d",mulBlock(2,5));
4. 使用,可以代替delegate,这个也是我一开始喜欢它的原因
具体可以项目内的代码,首先先设置
__weak ViewController* wself = self;
nextVC.getClickInfo = ^(NSInteger tag){
__strong ViewController* sself = wself;
sself.infoLabel.text = [NSString stringWithFormat:@"点击了第%ld个按钮",tag];
return 1;
};
其中 先设置__weak的原因是解决循环引用的问题, 内部 __strong是为了防止使用多线程的时候出错的.
在另一个 VC 先定义一个属性 @property(nonatomic, copy) int(^getClickInfo)(NSInteger);
int (^TempBlock)(NSInteger);
TempBlock = self.getClickInfo;
if (TempBlock) {
if(TempBlock(btn.tag))
{
NSLog(@"设置成功");
}
}
其中设置 TempBlock 也是防止多线程的时候被提前释放的问题.
Languages
Objective-C
100%