Block 讲解(基础)

来源:互联网 发布:网络机顶盒怎么连wifi 编辑:程序博客网 时间:2024/05/05 22:18

Block块语法本质上和其它的变量类似,不同的是它存储的数据是一个函数体,类似Java中的匿名方法,和C宇宙严重的函数指针。你可以像调用其他标准函数一样,传入参数以后,可以得到返回值


脱字符(^)是块语法的标记,按照我们熟悉的语法规定所定义的返回值急块的主题(也就是可以执行的代码)。


int  multiplier =7;

int(^myBlock)(int) = ^(int num) {return num *multiplier;}

以上例子

 用Xcode新建一个工程,选择OSX 中的命令行

#import <Foundation/Foundation.h>


//plas函数

int plas(int a)

{

   return a*10;

}

int main(int argc,constchar * argv[])

{

    //声明整型变量

   int tempNum =7;

    

    //声明函数

    //int plas(int a);

    //返回值  函数名  (参数列表)

    

    //声明函数指针,指向刚才的函数

    //返回值*变量名)(参数列表)

   int(* temp)(int a) =plas;

   NSLog(@"%d", temp(7));

    

    //返回值^对象名)(参数列表)

    //声明一个带有1个整型参数和整型返回值的Block对象

   int (^tempBlock1)(int value1,int value2 ) = ^(int value1,int value2)

    {

       return value1 * value2;

    };

   int (^tempBlock2)(int value) = ^(int value)

    {

       return value*tempNum;

    };

    

   NSLog(@"Block1对象的计算结果:%d", tempBlock1(6,7));

   NSLog(@"Block2对象的计算结果:%d", tempBlock2(6));

    

    //Block对象与函数与函数指针相比

    //1.Block对象的实现过程可以在函数(方法)体内声明;

    //2.Block对象的实现过程可以只接使用(限制)实现过程以外的已经声明的变量

    //3.BLlock对象中,不能对实现过程以外的变量做修改,必须增加关键字__block才可以修改

    

   __blockint block_tem =8;

   void (^incre)() = ^{

       NSLog(@"Block对象内部修改变量的结果:%d", ++block_tem);

    };

   NSLog(@"调用前:%d", block_tem);

    incre();

   NSLog(@"调用后:%d", block_tem);

    

    

    //实例,排序下面这个无序数组

   NSMutableArray *mutableArray = [[NSMutableArrayalloc]initWithObjects:@"3",@"2",@"5",@"6",@"9",@"1",@"7",nil];

    

    /*冒泡排序   方法一

    for (int i = 0; i<mutableArray.count; i++) {

        for (int j = 0; j<mutableArray.count-1-i; j++) {

            if ([mutableArray[j] integerValue] >[mutableArray[j+1] integerValue]) {

                NSString *temp = mutableArray[j];

                mutableArray[j] = mutableArray[j+1];

                mutableArray[j+1] = temp;

            }

        }

    }

     */  

    //OC方法,只能排成升序   方法二

    //[mutableArray sortUsingSelector:@selector(compare:)];

    

    

    //Block对象的应用    方法三

    /*[mutableArray sortUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {

        return [obj1 compare:obj2];

    }];

    */

    //Block  降序

    [mutableArraysortUsingComparator:^NSComparisonResult(NSString *obj1,NSString *obj2) {

       if ([obj1compare:obj2] ==NSOrderedAscending) {

            returnNSOrderedDescending;

        }

       if ([obj1compare:obj2] ==NSOrderedDescending) {

            returnNSOrderedAscending;

        }

        returnNSOrderedSame;

    }];

   NSLog(@"%@", mutableArray);

    

   return0;

}

这只是简单的讲解BLOCK 这个东西,真正的用途还需要慢慢去掌握,其实他就像是一个协议

0 0
原创粉丝点击