//

//  main.m

//  04-block数据类型

//

//  Created by apple on 14-3-18.

//  Copyright (c) 2014年 apple. All rights reserved.

//

#import <Foundation/Foundation.h>

#import "Calculate.h"

//数据类型

//1.作为参数传递

//2.作为函数的返回值

//3.声明成变量

void test()

{

NSLog(@"test");

}

int sum(int a, int b)

{

return a + b;

}

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

{

@autoreleasepool {

//int 4 float double 8 char

//更加合理的分配内存空间

int ca =10;

//对象类型 NSObject * obj

//id

//BOOL

//block 指向函数的指针比较像

//SEL

/*

void (*myPoint)() = test;

myPoint();

*/

//block就是弥补了 指向函数的指针,不能够直接保存一个函数体(代码块)

/*

void (^myBlock)() = ^{

NSLog(@"test");

};

myBlock();

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

return a + b;

};

int result = sumBlock(10,20);

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

*/

//如果想要改变,block代码块之外的变量值,就必须在变量前加入

//__block关键字

__block int x = 0;

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

int result = (a * b);

x = result;

return result;

};

NSLog(@"x = %d",x);//注意代码运行先后顺序  输出0;

//当在开发中,你发现一个方法中的算法,可以有多种实现,你一时还不能确定用哪种更好,你就可以吧方法中其中一个参数定义成block方式

//

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

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

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

NSLog(@"x = %d",x);//注意代码运行先后顺序  输出200;

}

return 0;

}

//

//  Calculate.h

//  02-OC中特有的一些语法

//

//  Created by apple on 14-3-18.

//  Copyright (c) 2014年 apple. All rights reserved.

//

#import <Foundation/Foundation.h>

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

@interface Calculate : NSObject

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

@end

//

//  Calculate.m

//  02-OC中特有的一些语法

//

//  Created by apple on 14-3-18.

//  Copyright (c) 2014年 apple. All rights reserved.

//

#import "Calculate.h"

@implementation Calculate

/*

- (int)calculateWithNumber1:(int)number1 andNumber2:(int)number2

{

//    return number1 + number2;

//    return number1 - number2;

//    return number1 * number2;

//    return number1 / number2;

}

*/

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

{

//经常变化的功能,在设计当中叫做封装变化

return calculate(number1,number2);

}

@end

block数据类型的更多相关文章

  1. 黑马程序员——Block数据类型

    Block数据类型,又被称为代码段.因为它可以封装一段代码.苹果官方建议多用block.因为在多线程控制.异步任务,集合遍历.集合排序.动画转场等方面用的很多. Block的特点: 1.Block 用 ...

  2. Objective-C Block数据类型 @protocol关键字

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

  3. 小白学开发(iOS)OC_ block数据类型(2015-08-08)

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

  4. [Objective-c 基础 - 3.3] block数据类型

    A.概念 1.block类似函数 (1)可以保存代码 (2)有返回值 (3)有形参  2.block的标志:^ // 没有参数和返回值的block void (^myblock)() = ^{ // ...

  5. Block解析(iOS)

    1. 操作系统中的栈和堆 我们先来看看一个由C/C++/OBJC编译的程序占用内存分布的结构: 栈区(stack):由系统自动分配,一般存放函数参数值.局部变量的值等.由编译器自动创建与释放.其操作方 ...

  6. block的解析

    1. 操作系统中的栈和堆 我们先来看看一个由C/C++/OBJC编译的程序占用内存分布的结构: 栈区(stack):由系统自动分配,一般存放函数参数值.局部变量的值等.由编译器自动创建与释放.其操作方 ...

  7. iOS常用设计模式和机制之Block简单使用

    Block :block 实际上就是 Objective-C语言对闭包的实现 闭包(Closure):闭包就是一个函数,或者一个指向函数的指针,加上这个函数执行的非局部变量.闭包允许一个函数访问声明该 ...

  8. iOS - OC Block 代码块

    前言 Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的,类似于一个 ...

  9. iOS - Block 代码块

    1.Block Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的, ...

随机推荐

  1. Redis Sentinel哨兵集群

    Redis Sentinel(哨兵集群)是一种高可用的redis部署方案.在集群中的redis-master服务挂掉时,无需人为干预,即可通过哨兵集群的自我调整,实现redis服务的持续可用. 哨兵集 ...

  2. treeview子节点文本过长超过DIV自动换行CSS解决

    //文本不换行 .ygtvcell.ygtvcontent{ white-space: nowrap; } //文本超过div出现滚动条 .main .buttom .right{ overflow- ...

  3. MySQL出现大量unauthenticated user的问题

    发现这算属MySQL的一个bug,不管连接是通过hosts还是ip的方式,MySQL都会对DNS做反查,IP到DNS,由于反查的接续速度过 慢(不管是不是isp提供的dns服务器的问题或者其他原因), ...

  4. iptables的详细介绍及配置方法*

    Firewall(防火墙):组件,工作在网络边缘(主机边缘),对进出网络数据包基于一定的规则检查,并在匹配某规则时由规则定义的处理进行处理的一组功能的组件. 防火墙类型:根据工作的层次的不同来划分,常 ...

  5. PHP MongoDB 扩展安装配置

    近日对MongoDB比较感兴趣,在linux下部署了一套LAMP,想把MongoDB加进来,下面进入正题: 1.确保安装好LAMP环境,假设php安装目录:/usr/local/php5 2.下载ht ...

  6. Delphi 记录类型- 结构指针

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  7. What's Assembly - CSharp - Editor - first pass.dll? Best How to Fix Assembly - CSharp - Editor - first pass.dll Error Guide

    If you've found yourself here, I'm guessing that you're getting Assembly - CSharp - Editor - first p ...

  8. CDH介绍

    本文引用自:Cloudera 系列2:CDH介绍http://www.aboutyun.com/thread-18379-1-1.html(出处: about云开发) CDH提供: 灵活性-存储任何类 ...

  9. pomelo架构概览

    pomelo之所以简单易用.功能全面,并且具有高可扩展性.可伸缩性等特点,这与它的技术选型和方案设计是密不可分的.在研究大量游戏引擎设计思路基础上,结合以往游戏开发的经验,确定了pomelo框架的设计 ...

  10. AOP 底层技术比较

    表 1. AOP 底层技术比较 AOP 底层技术 功能 性能 面向接口编程 编程难度 直接改写 class 文件 完全控制类 无明显性能代价 不要求 高,要求对 class 文件结构和 Java 字节 ...