您的位置:首页 > 移动开发 > Objective-C

Objective-C 基础知识之(十一):Block

2015-09-25 19:48 411 查看
Block

1、block定义
block的本质:匿名函数
标志:托字符 ^
定义block三部分:返回值类型 参数列表 block实现体

例1:定义block,实现输出 Hello orld
无返回值无参数
^ void (){
NSLog(@"Hello World");
};

2:定义block,返回两个整数的和
^ int (int a, intb){
return a + b;
};

2、定义block的语法
^ 返回值类型 (参数列:参数类型,参数名){
类似于函数体
如果block有返回值,需要return语句
};

3、block的使用

block是匿名函数,不能像函数一样通过函数名调用。
block可以声明 类似函数指针的block变量,通过block变量调用定义的block。
定义block变量操作时,要保证类型一致

定义block,实现输出 Hello orld
void (^sayHiBlock)()= ^ void (){
NSLog(@"Hello World");
};
sayHiBlock();

定义block,返回两个数的最大值
int (^maxBlock)(int,int) = ^ int (int a, int b){
return a > b ? a : b;
};
NSLog(@"%d",maxBlock(3,5));

定义block,传入一个字符串,返 回对应的整型数
int(^strBlock)(NSString *) = ^ int (NSString * inputStr){
return [inputStr intValue];
};
NSLog(@"%d",strBlock(@"123"));

定义block,传入两个字符串,返回拼接后的字符串
NSString *(^appendBlock)(NSString *, NSString *) = ^ NSString * (NSString * str1, NSString* str2){
return [str1 stringByAppendingString:str2];
};
NSLog(@"%@",appendBlock(@"mei", @"loveyou"));

4、便捷方式
block的定义部分,返回值类型可以省略不写。如果无参数则参数也可以省略不写。声明部分不能省。
void (^sayHiBlock)()= ^ {
NSLog(@"Hello Word");
};
sayHiBlock();

int(^strBlock)(NSString *) = ^ (NSString * str){
return [str intValue];
};
NSLog(@"%d",strBlock(@"123"));

5、block与变量的修改和读取

1 block与自己内部定义的局部变量:可以修改、读取
2 block与外部定义的局部变量:只能读取,不能修改
3 使用__block修饰的外部定义的局部变量,可以修改、读取
4 block与静态局部变量:可以修改,可以读取
5 block与全局变量:可以修改,读取

全局静态变量 全局指的是作用域;静态指的是存储区域。

在oc中定义、使用block,是为了实现函数回调。
将block作为方法的参数,传给对象。对象内部负责调用block,在对象的外部定义(实现)block。

6、使用typedef给block类型重定义

定义block时不需要返回值类型。

返回两个整型数的最大值
typedefint(^maxBlock)(int, int);

传入两个字符串 返回拼接后的字符串
typedef NSString*(^appendBlock)(NSString *, NSString *);

maxBlock block1 = ^(int x, int y){
return x > y ? x : y;
};

NSLog(@"%d",block1(3, 5));

appendBlock block2 =^ (NSString * str1, NSString * str2){
return [str1 stringByAppendingString:str2];
};
NSLog(@"%@",block2(@"mei", @"loveyou"));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: