黑马程序员 OC中的block的基础理解
来源:互联网 发布:mac下制作dmg到u盘 编辑:程序博客网 时间:2024/05/17 22:15
block是什么
block是c语言的一种数据类型,可以作为函数的参数,作为函数的参数时用的多一点,而作为函数的返回值相对用的较少
block的定义及block的基本用法,有三种形式:
1.无参无返回值 void(^myblock)()=^(){一段代码};
返回值(^myblock)(参数)
void(^myblock)()=^(){
NSLog(@"hahaha");
};
myblock();//调用
2.有参无返回值 void(^myblock)(int)=^(int a){一段代码};
void(^myblock)(int num)=^(int num){
NSLog(@"%d",num);
};
myblock(5);
3.有参有返回值 int(^myblock)(int)=^(int a){一段代码};
int(^myblock)(int num)=^(int num){
return num+1;
};
int a=myblock(5);
NSLog(@"%d",a);
为了简化代码,方便使用可以用typedef进行优化,类型如下
无参无返回值 typedefvoid(^myblock) ();
有参无返回值 typedefvoid(^myblock1)(int );
有参有返回值 typedefint(^myblock2)(int,int );
/*
block访问外部变量:
可以访问全局变量、外部定义的局部变量和内部定义的变量
可以修改全局变量和内部定义的变量,不可以修改外部定义的局部变量(除非被__block修饰)
*/
#import <Foundation/Foundation.h>
typedef void(^myblock) ();
typedef void(^myblock1) (int );
typedef int(^myblock2)(int,int );
int num=1; //全局变量,可以修改
int main(int argc,constchar * argv[]) {
@autoreleasepool {
__blockint num1=2; //外部定义的局部变量,不可以直接修改(除非被__block修饰)
myblock block=^(){
NSLog(@"hah%d",num1);
};
block();
myblock1 block1=^(int a){
int num2=3; //内部定义的变量,可以修改
NSLog(@"a=%d",a);
};
block1(5);
myblock2 block2=^(int b,int c){
return b>c?b:c;
};
int max=block2(19,23);
NSLog(@"max=%d",max);
}
return0;
}
block的基本应用场景
/*
block作为函数的参数
*/
#import <Foundation/Foundation.h>
typedefvoid(^myType) ();//用typedef写一个block类型
void test(myType block){//把一个block类型写入test函数的参数项
NSLog(@"haha");
}
int main()
{
@autoreleasepool {
myType block1;//在main函数中定义一个block数据类型
test(block1);//调用test函数,把block传进去
}
return0;
}
block作为函数的返回值
/*无参无返回值
mytype test(){
mytype b=^(){
NSLog(@"haha");
};
return b;
}
mytype block;
block=test();
block();
有参无返回值
mytype test1(){
void(^mytype)(int,int)=^(int x,int y){
NSLog(@"%d",x+y);
};
return mytype;
}
mytype block1=test1();
block1(3,2);
有参有返回值
mytype test(){
int(^myblock)(int,int)=^(int a,int s){
return a+s;
};
return myblock;
}
mytype sum=test();
int sum1=sum(2,3);
NSLog(@"%d",sum1);
*/
- 黑马程序员 OC中的block的基础理解
- 黑马程序员****OC语言基础****Block概念和理解
- 黑马程序员---iOS基础---OC中的ARC、分类、block
- 黑马程序员-IOS-OC基础-Block
- 黑马程序员------OC基础-----block和protocol
- 黑马程序员 OC基础: Block 和 Protocol
- 黑马程序员-OC语言基础:block
- 黑马程序员------[Objective-C]OC中的block
- 【黑马程序员】-oc中的block和protocol
- 黑马程序员---oc block
- 黑马程序员****OC语言基础****MRC的理解
- 黑马程序员 _10 OC基础 block 协议 代理
- 黑马程序员-IOS-OC基础-Block和协议
- 黑马程序员——OC基础---block,protocol
- 黑马程序员---OC基础---Block、分类Category、协议protocol
- 黑马程序员——OC基础---Block、protocol
- 黑马程序员——OC基础04—block、protocol
- 黑马程序员——OC基础之Block
- linux常见基本命令之十八dd
- iOS开发笔记--cell最右边显示箭头,字符,自定义分割线
- 本人在安卓程序开发时用到的各种小功能(一) 屏幕截图
- iOS开发笔记--使用blend改变图片颜色
- u-boot-2016.01分析s3c2410启动过程
- 黑马程序员 OC中的block的基础理解
- 两种方式获取Thrift调用的客户端IP地址
- iOS开发笔记--图片拉伸技巧
- 常用算法——快速排序
- Xcode 插件优缺点对比(推荐 20 款插件)
- 【解决方案】谈公众号红包的正确打开方式--传奇创世
- Linux常用命令大全
- (一)由浅入深java集合--HashMap原理
- NFC在Android平台的架构与移植