//

//  main.m

//  block数据类型

//

//  Created by admin on 15/8/12.

//  Copyright (c) 2015年 admin. All rights reserved.

//

#import <Foundation/Foundation.h>

#import "Calculate.h"

//  定义一个函数

void test()

{

NSLog(@"test函数");

}

int main(int argc,
const char * argv[]) {

@autoreleasepool {

/*

数据类型的作用:
是为了更加合理的分配内存空间

数据类型的功能特点:

1. 作为參数传递

2. 作为函数返回值】

3. 声明变量

OC中的数据类型:

1. 对象类型(NSObject * obj)

2. id

3. BOOL

4. block

5. SEL

6. 基本数据类型

*/

//  注意:block数据类型
和 指向函数的指针类似

//  指向函数的指针例如以下:

int (*myPoint)() =
test;

myPoint();     //  
这里就能够通过指针来调用test函数

//  注意:然而指向函数的指针不能直接指向函数即一个代码块,必须通过函数名来指向

//       block就是弥补了这一点,可以直接保存一个函数体(代码块)

void (^myBlock)() = ^{

NSLog(@"jajajaj");

};                    
// 这里myBlock就代表后面括号里的代码块

myBlock();

//  也能够传入參数,有返回值

/*

int (^sumBlock)(int a, int b) = ^ int(int a, int b) {

return a + b;

};

int result = sumBlock(10, 20);

NSLog(@"%d", result);

*/

//  block作为參数传递(block实际指向的是一个函数或者代码块,那么将这个函数或代码块作为參数传递)

//  使用场景:当在开发中,你发现一个方法中的算法,能够有多种实现,你一时还不能确定用哪种更好,你就能够吧方法中当中一个參数定义成block方式

/*

int (^jianBlock)(int a, int b) = ^int(int a, int b){

return a - b;

};

Calculate *cal = [[Calculate alloc]init];

int jian = [cal calculateWithNumber1:10 andNumber2:20 andCalculate:jianBlock];

NSLog(@"%d",jian);

*/

//  注意:假设在作用域范围之内,block是能够使用变量的,可是要在block代码块中改变非块中变量的值就要在变量前加__block

//        int x =0;

__block int x =
;

int (^sumBlock)(int a,
int b) = ^ int(int a,
int b) {

int result = (a + b) + x;  
//  这个是正确的

x = result;  
//这里就必需要求在定义x的时候前加__block

return result;

};

Calculate *cal = [[Calculate
alloc]init];

int sum = [cal
calculateWithNumber1
andNumber2
andCalculate:sumBlock];

NSLog(@"sum = %d",sum);

NSLog(@"x = %d",x);

}

;

}

//

//  Calculate.h

//  OC的特有语法

//

//  Created by admin on 15/8/12.

//  Copyright (c) 2015年 admin. All rights reserved.

//

#import <Foundation/Foundation.h>

//  创建一个别名为calculateBlock的block。返回值为int。有两个int类型的參数,这里与指向函数的指针类似

typedef
int (^calculateBlock)(int a,
int b);

@interface Calculate :
NSObject

//  将block作为參数传入

//  这个函数的作用是计算两个数的加减乘除等运算,前两个參数是运算的数字。block类型的第三个參数的计算方法

- (int)calculateWithNumber1:(int)number1 andNumber2:(int)number2 andCalculate:(calculateBlock)calculate;

@end


//

//  Calculate.m

//  OC的特有语法

//

//  Created by admin on 15/8/12.

//  Copyright (c) 2015年 admin. All rights reserved.

//

#import "Calculate.h"

@implementation Calculate

- (int)calculateWithNumber1:(int)number1 andNumber2:(int)number2 andCalculate:(calculateBlock)calculate

{

return calculate(number1, number2);

}

@end


小白学开发(iOS)OC_ block数据类型(2015-08-08)的更多相关文章

  1. 小白学开发(iOS)OC_ SEL数据类型(2015-08-10)

    // //  main.m //  SEL数据类型 // //  Created by admin on 15/8/12. //  Copyright (c) 2015年 admin. All rig ...

  2. 小白学开发(iOS)OC_ 使用继承来扩充类(2015-08-07)

    // //  main.m //  使用继承来扩充类 // //  Created by admin on 15/8/12. //  Copyright (c) 2015年 admin. All ri ...

  3. 小白学开发(iOS)OC_ 字符串重组(2015-08-13)

    // //  main.m //  字符串重组 // //  Created by admin on 15/8/13. //  Copyright (c) 2015年 admin. All right ...

  4. 小白学开发(iOS)OC_ 字符串的获取 (2015-08-11)

    // //  main.m //  字符串的获取 // //  Created by admin on 15/8/13. //  Copyright (c) 2015年 admin. All righ ...

  5. 小白学开发(iOS)OC_ 字符串写入文件(2015-08-13)

    // //  main.m //  字符串写入文件 // //  Created by admin on 15/8/13. //  Copyright (c) 2015年 admin. All rig ...

  6. 小白学开发(iOS)OC_ 经常使用结构体(2015-08-14)

    // //  main.m //  经常使用结构体 // //  Created by admin on 15/8/13. //  Copyright (c) 2015年 admin. All rig ...

  7. iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)

    iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)   使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: ...

  8. 小白学 Python(2):基础数据类型(上)

    人生苦短,我选Python 引言 前文传送门 小白学 Python(1):开篇 接触一门新的语言,肯定要先了解它的基础数据类型.啥?你问我为啥要先了解基础数据类型? 为了你的生命安全,还是乖乖听我 B ...

  9. 小白学 Python(3):基础数据类型(下)

    人生苦短,我选Python 引言 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 前面我们介绍过了数字,本篇我们接着聊另一个常用的基础数据类型:字符串. ...

随机推荐

  1. python 进阶:修饰器的介绍

    参考链接:Python 函数装饰器 我认为python中的装饰器是一个很厉害的功能,他能瞬间提升代码的逼格,但对于我这样的小白来说,别说为所欲为的使用了,就连简单的尝试一下,却也是难于登天.经过长达半 ...

  2. 帆软FineBI试用

    FineBI是帆软软件有限公司推出的一款商业智能(Business Intelligence)产品,FineBI的本质是通过分析企业已有的信息化数据,帮助企业发现并解决存在的问题,预测模拟企业将来的发 ...

  3. C# 从需要登录的网站上抓取数据

    [转] C# 从需要登录的网站上抓取数据 背景:昨天一个学金融的同学让我帮她从一个网站上抓取数据,然后导出到excel,粗略看了下有1000+条记录,人工统计的话确实不可能.虽说不会,但作为一个学计算 ...

  4. [Recompose] Make Reusable React Props Streams with Lenses

    If you hard-code a stream of props to target a specific prop, it becomes impossible to reuse that st ...

  5. vue29-vue2.0组件通信_recv

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 融云消息接口apicloud

    融云提供消息发送服务,支持个人消息,群消息,讨论组,聊天室消息, 以下是它涉及到的接口. 初始化,连接之后,可以使用. <!DOCTYPE html> <html> <h ...

  7. 4.菜鸟教你一步一步开发 web service 之 axis 客户端创建

    转自:https://blog.csdn.net/shfqbluestone/article/details/37723517 在上个教程中我们创建了一个 axis 服务端的 web service ...

  8. WebServic调用天气预报服务

    在项目开发中,我们除了发布WebService提供客户调用外,也经常需要调用一些客户或者第三方的WebService服务,这里就通过一个Demo来演示调用一个第三方的天气预报服务. 1.天气预报服务接 ...

  9. Weka中数据挖掘与机器学习系列之为什么要写Weka这一系列学习笔记?(一)

    本人正值科研之年,同时也在使用Weka来做相关数据挖掘和机器学习的论文工作. 为了记录自己的学习历程,也便于分享和带领入门的你们.废话不多说,直接上干货!

  10. Python(一) 基本类型

    前言: 什么是代码? 代码是现实世界事物在计算机世界中的映射. 什么事写代码? 写代码是将现实世界中的事物用计算机语言来描述. 一.数字:整形与浮点型 整型:int 浮点型:float (没有单精度和 ...