代码改变世界

block数据类型

2016-12-13 22:53  supper_Ho  阅读(571)  评论(0编辑  收藏  举报

//

//  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