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"));
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"));
相关文章推荐
- iOS经典讲解之Objective-C内存管理基础知识及内存管理黄金原则
- JDK源码阅读之Object类
- 《Objective-C入门 》 第一篇 - 合成存取器
- core foundation与objective-c之间有什么关系和区别
- Objective-C:为何使用ivar成员变量?Why would you use an ivar?[zz]
- Swift - AnyObject与Any的区别
- Swift调用Objective-C编写的代码(颜色选择器KKColorListPicker调用)
- Objective-C和JS交互
- C++ 11 - STL - 函数对象(Function Object) (中)
- Objective-C---3---NSString的常用方法
- 设计模式之工厂方法模式(代码用Objective-C展示)
- Java学习笔记【Object】
- 【投稿】打造Objective-C安全的Collection类型
- Object-C 对象初始化
- Object-C 数组(一)(NSArray)
- Object-C 字符串对象
- object-c 字符串(NSString)
- 【IOS 开发学习总结-OC-18】★★objective-c面向对象之——OC的包装类与对象处理
- org.hibernate.NonUniqueObjectException的原因与解决方法
- 黑马程序员--Java基础学习笔记【Object类、String类】