zoukankan      html  css  js  c++  java
  • block数据类型

    //

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

  • 相关阅读:
    gitbook 入门
    mac 手动卸载软件位置
    idea 版本控制忽略文件、文件夹设置
    Mac .DS_Store 隐藏文件和清理.DS_Store的方法
    mac 打开整个系统的隐藏文件
    js拼接字符串,字符串转数组
    新一代 javascript 模板引擎:artTemplate-3.0
    webpack+express多页站点开发
    Vue2学习笔记:组件(Component)
    Vue2学习笔记:过渡效果css
  • 原文地址:https://www.cnblogs.com/supper-Ho/p/6172201.html
Copyright © 2011-2022 走看看