码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2017-06-08 21:34:56      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:rac   art   作用域   copy   方式   article   content   lock   数字   

//

//  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 = 0;

        

        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:10 andNumber2:20 andCalculate:sumBlock];

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

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

    }

    return 0;

}

//

//  Calculate.h

//  OC的特有语法

//

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

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

//


#import <Foundation/Foundation.h>

//  创建一个别名为calculateBlockblock。返回值为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)

标签:rac   art   作用域   copy   方式   article   content   lock   数字   

原文地址:http://www.cnblogs.com/jzssuanfa/p/6964740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!