一、block定义
用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行
在iOS中用“^”声明block变量,block的内容是包含在”{}“中的,用”;“表示语句结束。
1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样。
//1. 无返回值无参数的block写法
// 声明了一个void(^)(void)类型的变量 block
void (^block)(void) = ^(void){
NSLog(@"hello word!");
};
// block变量的的使用
block();
// 2. 有返回值,无参数
int (^block1)(void) = ^(void){
return 100;
};
NSLog(@"%d", block1());
// 3. 无返回值,有参数
void (^block2)(int a,int b) = ^(int a, int b){
NSLog(@"%d", a + b);
};
block2(3, 5);
// 4. 有返回值, 有参数
NSString *(^block3)(NSString *str1, NSString *str2) = ^(NSString *str1, NSString *str2){
NSString *str3 = [str1 stringByAppendingString:str2];
return str3;
};
NSString *a = block3(@"hello", @" word!");
NSLog(@"%@", a);
NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"bbb", @"aaa", @"ccc", @"ddd", @"eee", nil];
[arr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj2 compare:obj1];
}];
NSLog(@"%@", arr);
使用条件:(由后一页往前一页传值)
步骤:1.
// 写一个block的属性 属性必须使用copy
#warning block传值1: 给第二个页面写一个block参数, 由第一个页面创建,赋给第二个页面使用
@property (nonatomic, copy) void(^changeName)(NSString *str);
步骤:2.
#warning block传值2: 第一个页面创建一个block参数, 给第二个页面赋值
[second setChangeName:^(NSString *str) {
// 利用block的参数给自己的按钮重新赋值
[button setTitle:str forState:UIControlStateNormal];
NSLog(@"1");
}];
步骤:3.
<span style="font-size:18px;">#warning block传值3: 在合适的地方, 使用block参数
self.changeName(_textField.text);</span>
<pre name="code" class="plain">
步骤:4.
- (void)dealloc
{
Block_release(_changeName);
[super dealloc];
}