OC教程6-1-block各种用法
来源:互联网 发布:最新影视软件 编辑:程序博客网 时间:2024/05/16 01:04
block:又称代码块,闭包;代码块是对一段代码的封装,代码块可以作为一个对象来使用,类似于函数指针变量,可以作为函数的参数来进行传递,也可以直接在代码中匿名实现.
使用block可以方便我们封装SDk,代码简洁,耦合性低
block的定义和实现类似函数的声明和实现
block的类型可以从xcode右侧的代码片段里直接拖拽即可.
//// main.m// TestBlock//// Created by on 14-8-11.// Copyright (c) 2014年xx. All rights reserved.//#import<Foundation/Foundation.h>typedef int (^MyBlock) (int, int);//定义一个block然后可以被多次使用//代码块作为形参使用,代码跨名字可以任意,但是参数和返回类型在传入时要和括号中的保持一致//1.block作为函数的参数使用int getResult(int(^mYblock)(int ,int ))//传入该类型的block参数,名称可以有很多{ int r=mYblock(200,100);//调用该代码块(未实现) NSLog(@"r结果是%i",r); return 0;}int main(int argc,const char * argv[]){ @autoreleasepool { int c=2; //在block内部可以读外面的局部变量,但是不能修改,要修改需要加上__block声明 //0.定义一个代码块可读可写的变量 __block int c2=1;//block可以修改的局部变量,不使用__block是无法修改C的(不加的话在block内只读的) //2.定义一个block int (^myBlock)(int ,int); //声明一个block,在下面可以实现 //3.实现一个block myBlock=^(int m,int n)
{
NSLog(@"m==%i,n==%i",m,n);
return m*n*c*(c2=c2+1);
};//把block当做一个变量 //4.调用block int r=myBlock(7,8); NSLog(@"%i",r); int(^mYblock)(int ,int )=^(int m1,int n1)//一个具体的block的实现,可以当一个变量使用 { return m1-n1; };
//5.block作为参数使用 getResult(mYblock); //去掉int(^mYblock)(int ,int )=就可以了,相当于传入的参数直接把block实现 //getResult(int(^mYblock)(int ,int )=^(int m2,int n2){return m2+n2;});//报错,写法错误! //6.内联代码块的定义实现一个代码块,可以不用声明,直接实现,代码简洁,类似于Java的匿名内部类 getResult(^(int m2,int n2){NSLog(@"使用内联代码块!");return m2+n2;}); int(^xxxBlock)(int,int )=^(int m3,int n3){return m3+n3;};//由此可见,函数开头的声明的参数,跟具体的名字无关,只要是block的类型是一样的即可 getResult(xxxBlock); // int(^yyyBlock)(int x)=^(int x){ NSLog(@"x的值是:%i",x); return x;}; //getResult(yyyBlock);//报错,说明,参数的类型和个数必须一致,但是名字可以是别的 } return 0;}
原文地址:http://blog.csdn.net/yangbingbinga
0 0
- OC教程6-1-block各种用法
- OC教程6-代码块block回调
- OC -- block的用法
- 【OC笔记】block的用法
- OC中的block的用法总结
- OC中块Block的用法
- OC 重点block-------4-------block案例1
- OC 6 Block块语法
- 【OC】Block
- OC block
- OC--block
- OC - Block
- OC --- block
- OC-BLOCK
- oc Block
- OC-Block
- oc-Block
- OC--block
- 腾讯提供的查询QQ在线状态
- JS获取GET参数
- Poj 2352 Stars 树状数组
- js中将int类型转为float类型,并取位
- 栈之链栈
- OC教程6-1-block各种用法
- Java基础第四篇 面向对象的基本概念(中)
- 2014华为机试题13:打渔还是晒网
- 使用代码写成json串
- 自定义对象属性为空自动转换为字符串
- Maven学习资源
- [HDOJ 4940] Destroy Transportation system [最大流]
- 测试C++代码与WebBrowser HTML的互动
- 简单:01背包问题