一、关于block

1、block的作用:保存一段代码。

2、苹果官方推荐的一种语法,类似于C语言的函数,但是比函数更加灵活。

3、^是block语法的标识。

二、block的用法

1)无返回值无参数

  

 - (void)myFirstBlock
{
//1.定义block
void (^myblock)() = ^{
NSLog(@"无参数无返回值");
};
//2.调用block
myblock(); }

输出结果:

2016-02-18 09:56:50.124 01-block[750:25107] 无参数无返回值

2)有参数没有返回值

- (void)mySecondBlock
{
//1.定义block
void (^mySecondBlock)(int,int) = ^ (int num1,int num2){
NSLog(@"有参数无返回值:%d",num1 + num2);
};
//2.调用block
mySecondBlock(2,3);
}

输出结果:

2016-02-18 10:03:22.221 01-block[811:30160] 有参数无返回值:5

3)有参数有返回值

 - (void)myThirdBlock
{
//1.定义block
double (^myThirdBlock)(double,double) = ^ (double r1,double r2){
return r1 + r2;
};
//2.调用block
double r3 = myThirdBlock(1.1,2.2);
NSLog(@"有参数有返回值:%f",r3);
}

输出结果:

-- ::42.615 -block[:] 有参数有返回值:3.300000

三、block语法的格式

四、block的注意点

1)Block内部可以访问外部变量;

2)默认情况下,Block内部不能修改外部的局部变量

3)给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改

示例代码如下:

 - (void)myFourBlock
{
int num = ;
void (^myFourBlock)() = ^{ num = ;
NSLog(@"%d",num);
};
}

如果写成上面的代码,Xcode会在第六行“num = 6;”报错:missing __block type specifier;

修改代码如下:

- (void)myFourBlock
{
__block int num = ;
void (^myFourBlock)() = ^{ num = ;
NSLog(@"%d",num);
};
myFourBlock();
}

输出结果:

-- ::02.195 -block[:] 

代码虐我千百遍,我待代码如初恋!

关于OC中的block自己的一些理解(一)的更多相关文章

  1. 关于OC中的block自己的一些理解(二)

    一.block延伸:页面间反向传值 1)first页面的代码 - (void)viewDidLoad { [super viewDidLoad]; [self setupBtn]; self.view ...

  2. Swift: 比较Swift中闭包传值、OC中的Block传值

    一.介绍 开发者对匿名函数应该很清楚,其实它就是一个没有名字的函数或者方法,给人直观的感觉就是只能看到参数和返回值.在iOS开发中中,它又有自己的称呼,在OC中叫Block代码块,在Swift中叫闭包 ...

  3. OC 中的block使用

    在iOS的开发过程中,使用块的地方很多也很方便,但是在使用块的过程中要注意内存泄露的问题. 在块创建的时候,会对块内的所有对象的引用计数加一,直到块销毁,所以在使用块的过程中需要我们进行处理,在这里以 ...

  4. OC 中的block存储位置

    以下所有在ARC情况下: 一.block块的存储位置(block块入口地址):可能存放在2个地方:代码区.堆区(程序分5个区,还有常量区.全局区和栈区,对于MRC情况下代码还可能存在栈区.关于分区详细 ...

  5. OC中的Block的那些事

    Block封装了一段代码,可以在任何时候执行 Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值. 苹果官方建议尽量多用block.在多线程.异步任务.集合遍历.集合排序.动 ...

  6. oc中的block使用心得

    typedef void (^ simpleBlock) (void); typedef double (^multiplyTwoValues)(double, double); typedef vo ...

  7. oc中的block

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

  8. Swift 闭包即OC中的Block

    - 闭包的定义 1.提前准备好的代码        2.在需要的时候执行        3.可以当做参数传递 // 1.最简单的闭包 // () -> () 没有参数,没有返回值的函数 // 如 ...

  9. OC中的block作方法参数时的用法

    方式一.在传参时直接声明block回调方法. 1. 定义方法: - (int)doTest:(NSString *)name success:(int (^)(int param1, int para ...

随机推荐

  1. String.split()用法以及特殊分隔符注意,ps:|

    转载:http://www.cnblogs.com/mingforyou/archive/2013/09/03/3299569.html 在java.lang包中有String.split()方法,返 ...

  2. Asp.net 高性能 Sqlite ORM 框架之 sqliteSugar

    一.介简 easyliter框架的升级版本,并且正式命名为SqliteSugar框架,另外Sugar系列还有 MySql和MsSql版本,Oracle版本待开发中(因为客户端太大一直在忧郁当中) 用S ...

  3. react经典进阶demo

    这是我在官方文档上看到的,功能是实现(具体是什么,请往下看) 以下是json数据: [ {category: "Sporting Goods", price: "$49. ...

  4. 计算机中数据实体和数据表示形式(以C#为例)

    摘自网络的一段话: “在程序代码中,可以用多种方式表示数据,十进制.十六进制.八进制都是常用的表示方式,但计算机内部永远就只使用二进制,与你写程序时用什么无关.你说要定义数组int a[10],其中涉 ...

  5. SQL--语句的执行顺序

  6. 获取MS SQL TABLE列名列表

    在MS SQL Server中,想获取表的所有列名,可以使用下面SQL语句: SELECT [COLUMN_NAME] FROM [INFORMATION_SCHEMA].[Columns] WHER ...

  7. 【vbs】vbs写ini文件

    这两天在折腾给一个项目打安装包,第一次接触软件打包,用的Advanced Installer(以下简称AI),应该说如果安装过程没有特殊动作(常规动作指释放文件.写注册表.建快捷方式等)的话,倒挺傻瓜 ...

  8. Ajax实现定时刷新页面

    function deleteValue(){ var refresh = function() { $.ajax({   type:'post',   url:'/Application/index ...

  9. 解决SqlPlus前台程序出现中文乱码的问题

    在使用sqlplus的过程中,常常会遇到某一台机器在访问oracle数据库时中文显示乱码的问题,实际上这是因为客户端字符集和服务器字符集不一致导致的.在实际使用中,服务器字符集,客户端字符集和操作系统 ...

  10. mysql分页查询详解

    我们做的后端项目一般都会有admin管理端,当管理端将要展示数据的时候,就需要用到分页.所以分页的考查在面试中也相当多.在mysql中进行分页查询时,一般会使用limit查询,而且通常查询中都会使用o ...