<span style="font-family: Arial, Helvetica, sans-serif;font-size:24px; background-color: rgb(255, 255, 255);">block分为两部分 ------ block需要调用才能使用(与函数调用类似)</span>
左边:1.以返回值类型作为开头 2.后接一个小括号(^block) 3.最后的小括号里写参数的类型,没有就什么都不写
右边:1.^作为开头 2.(小括号里写形参列表) 3.大括号写函数实现的部分;
/<span style="font-size:18px;">/ void (^block)() = ^(){
// NSLog(@"程锦");
//
// };
// // block的调用(与函数调用类似)
// block();</span>
用block实现从后向前传值
1.先写block方法(受到里面形参使用范围的影响,只能写在大括号里能用,所以以后从后往前传值的时候,所有的操作都写在block里)
2.要把block遥控器从前往后通过属性进行传值,block的类型是copy,后面部分和等号左边是一样的. 然后将遥控器传过去
<span style="font-size:18px;">//@property(nonatomic, copy)void(^block)();
// 和等号左边是一样的</span>
3.然后将block赋值使用
- (void)click:(UIButton *)button{
[self.navigationController popToRootViewControllerAnimated:YES];
self.block(self.textField.text);
// [self.delegate change];
#pragma mark 调用block
// self.block();
// self.newblock(self.textField.text);
}
<pre name="code" class="objc"> void (^block)() = ^(){
NSLog(@"1111");
};
NSLog(@"%p", block);
__block int a = 0;
void (^block)() = ^(){
a++;
NSLog(@"%d", a);
};
NSLog(@"%p", block);
两个block打印的地址是不同的,第一个在堆区,第二个在栈区. 如果直接将a在block中进行操作,会报错,因为a在block中是只读的,加上__block之后就可以操作(两个下划线)