Objective-C 基础知识之(十一):Block
来源:互联网 发布:网络推广要什么证书 编辑:程序博客网 时间:2024/05/16 14:19
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"));
- Objective-C 基础知识之(十一):Block
- objective-c基础之block
- objective-c之block 总结
- Objective-C之Block剖析
- Objective-C基础知识之(五):NSString
- Objective-C 基础知识之(八):NSSet
- Objective-C 基础知识之(十二):NSDate
- Objective-C 基础知识之 (十五):KVC
- Objective-C语法之代码块(block)的使用
- 多库俄罗斯方块之十一(Objective-c)
- C语言基础知识之(十一):结构体的内存
- 黑马程序员 之 Objective-C 初识block
- Objective-C研究之Block的使用
- Objective-C之block详细介绍
- iOS基础知识:Objective-C 之 通知(Notification)
- Objective-C基础知识之(三):继承、#import、@class:
- Objective-C 基础知识之(六):NSArray、NSMutableArray
- Objective-C 基础知识之(七):NSDictionary、NSMutableDictionary
- 5.1图
- DOM,href,书签,表格,列表,按钮,框架,表单,自动刷新,link,label简单操作
- Spring事务处理时自我调用的解决方案及一些实现方式的风险
- 给定一个二叉树和任意一个节点,求该该节点的下一层的第一个节点
- C#将图片以二进制流形式存到数据库,并读取显示
- Objective-C 基础知识之(十一):Block
- WebForm总结_HttpModule原理图
- Objective-C 基础知识之(十二):NSDate
- 用Treap实现Splay和线段树的功能
- LeetCode-Contains DuplicateI
- Objective-C 基础知识之(十三):类目、延展、协议、代理等的基本概念
- Android使用SpannableString实现文本框里插入表情
- Django模板中日期过滤器的问题
- Oracle回顾--存储过程、函数、程序包