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

  • 相关阅读:
    ASP.NET 高级编程基础第七篇—开发原则2
    反垃圾邮件引发的Email格式变异!
    .NET框架程序设计生成,打包,部署及管理应用程序与类型(2:Assembly的生成以及版本信息)
    .NET框架程序设计NET框架开发平台的体系架构概览(FCL,CTS,CLS)
    .NET框架程序设计生成,打包,部署及管理应用程序与类型(1:程序集的PE格式)
    [电影]蝴蝶效应
    .NET框架程序设计.NET框架开发平台的体系架构概览(.NET程序本质)
    [转贴]浅析.NET Framework对PE文件格式的扩展
    [MSDN今日讲座]Whidbey 开发系列讲座二:Visual Studio 2005团对开发系统简介
    郁闷!我的Gmail邮箱的问题!
  • 原文地址:https://www.cnblogs.com/supper-Ho/p/6172201.html
Copyright © 2011-2022 走看看