[黑马IOS自学第十七篇]OC BLOCK学习
来源:互联网 发布:用电脑看小说的软件 编辑:程序博客网 时间:2024/05/16 02:56
block概念和基本使用
Object-C中衍生的数据类型:SELidBLOCKBOOLBoolean
---基本概念
定义个变量去存储代码块
函数名就是地址无需加&取地址符
#import <Foundation/Foundation.h> int main(intargc, const char* argv[]) { @autoreleasepool { //定义一个block变量,并且赋值 void (^myBlock)()=^{ NSLog(@"hello"); }; myBlock(); typedef void(^Block) (); Block b1 ; b1=^{ NSLog(@"hello world"); }; b1(); //定义有参数有返回值的block typedef int (^NewType1) (int ,int); NewType1 nt1 =^(int a , int b){ return a+b; }; int result = nt1(12,23); NSLog(@"result ofnt1(12,23) = %d",result); } return 0;}
#import <Foundation/Foundation.h> int main(intargc, const char* argv[]) { @autoreleasepool { //有参有返回值 int (^myBlock2)(int,int)=^(int num1 ,intnum2){ NSLog(@"有参有返回值:%d",num1+num2); return 0; }; myBlock2(4,5); //定义了边变量 后赋值 myBlock2=^(int x ,int b ){ NSLog(@"max=%d",x>b?x:b); return 0; }; myBlock2(4,5); //有参数无返回值 void (^myBlock1)() = ^(int num1){ NSLog(@"有参无返回值:%d",num1); }; myBlock1(45); //无参无返回值 (可以省略()) //void(^myBlock4)()=^(){ void (^myBlock4)()=^{ NSLog(@"无参无返回值的block"); printf("无参无返回值的block\n"); }; myBlock4(); } return 0;}
5的地址变小了,所以不是同一个m
在堆区,地址后六位都会有内容
静态区或者常量区后四位没有0,前四位全是0)0x1000022322
block存在堆区,也算事一个对象。
当定义一个block的时候,block会把外部变量的值以const的方式复制一份,存放到block的所在的内存中
__block int m = 10 ;在block中就可以修改外部变量 m,
__block表示不再以
在block内部的变量值不能被修改。
在block内部创建的变量,存放到栈区,局部变量
Block应用场景
将重复的代码定义成代码块,作用:传递代码块
block变量作为workBlock函数的参数
函数名不能作为方法的参数传递
要也只能传函数指针
block作为函数的返回值
#import <Foundation/Foundation.h>//先给block起一个别名typedef void(^NewType)(); //用定义的类型作为函数的返回值//返回值是block类型NewType test(){ NewType w1 = ^{ NSLog(@"xxxxxxx"); NSLog(@"0000000"); }; return w1;//返回一个block} typedef int(^NewType2)(int,int) ; //用定义的类型作为函数的返回值NewType2 test2(){ return ^(int a,int b ){ return a+b; };} int main(intargc, const char* argv[]) { @autoreleasepool { //接收返回结果 NewType n1 = test(); //执行block n1(); NewType2 n2 = test2(); //执行block int result = n2(2,2); NSLog(@"%d",result); } return 0;}
block快速提示
inLineBlock助记符
<#returnType#>(^<#blockName#>)(<#parameterTypes#>)= ^(<#parameters#>) {
<#statements#>
};
将代码拖动到{ }代码快中并写入title-
再'>'完成,可以在下次输入title的时候
2 0
- [黑马IOS自学第十七篇]OC BLOCK学习
- [黑马IOS自学第十六篇]OC分类学习
- 自学iOS开发系列----OC(block)
- 黑马程序员- IOS学习笔记-OC ARC、BLOCK、protocol
- 黑马程序员——ios学习笔记 OC 协议&Block
- 黑马学习视频-OC-block
- [黑马IOS自学第十篇]OC语言基础,面向对象概念,类学习
- 黑马程序员--OC自学笔记---08ARC、category、block
- 黑马程序员-IOS-OC基础-Block
- 黑马程序员IOS-OC语言-Block
- 黑马程序员:OC学习日记之block
- 黑马程序员--IOS学习日记:13--OC中的block和protocol
- IOS—OC学习六—block
- 黑马程序员---oc block
- [黑马IOS自学第十三篇]@protocol协议学习
- [黑马IOS自学第十四篇]Foundation框架学习
- [黑马IOS自学第九篇]OC语言基础,面向对象概念,类的创建,OC多文件开发等
- 黑马程序员-IOS-OC基础-Block和协议
- DOM扩展:DOM API的进一步增强[总结篇-上]
- JVM的GC简介和实例
- 【设计模式】适配器模式
- linux网络编程实用命令
- Leetcode217: Reverse Nodes in k-Group
- [黑马IOS自学第十七篇]OC BLOCK学习
- Herd Mentality(群集心态)
- xshell window远程到linux服务器,文件传输
- 数据库编码修改
- 谷歌J2ObjC:打破Android应用与iOS应用之间的语言障碍
- 科摩多数据备份工具下载
- Windows程序内部运行机制学习
- 在c++中尾递归,普通递归,循环的效率对比
- Android——谷歌官方下拉刷新控件SwipeRefreshLayout