block的知识点

//

//  main.m

//  1211块练习

//

//  Created by jerehedu on 14/12/11.

//  Copyright (c) 2014 jereh. All rights reserved.

//

 

#import <Foundation/Foundation.h>

 

int a=10;

 

int b=12;

 

 

int main(int argc, const char * argv[])

{

//    int __block c=19;

 

    @autoreleasepool {

        

        //block能够訪问局部变量,可是不能改动

        //__block 块改动 keyword   不加的话无法在块内对c(局部变量)进行改动

        __block int  c=19;

        

        void (^nBlock)()=^{

            c+=9;

            NSLog(@"%i",c);

            

        };

        nBlock();

        

        //外部变量能够直接操作、改动

        void (^nmBlock)()=^{

            

            NSLog(@"%i",++a);

            

        };

        nmBlock();

        

        

        NSLog(@"%i,%i",a,b);

        

        //block保存一段代码,用花括号括起来

        //block标志是^

        /*block与函数比較

         1.能够保存代码

         2.有返回值

         3.有形參

         4.调用方式和C调用函数一样

         */

        

        

        //没有參数返回值的块

        void (^ myBlock)();

        myBlock=^{

            NSLog(@"没有參数返回值的块。

");

        

        };

        //直接写完不会被运行,被保存起来了,须要调用

        //块的调用

        myBlock();

        

        //写在一起

        void(^ myblock)()=^{

            NSLog(@"没有參数返回值的块。

");

        };

        myblock();

    

        //能够把块写在main的上面,则整个函数体内直接调用就可以

//==========================================================

        //有參数返回值的 加法

        int (^ addBlock)(int,int)        =      ^(int a,int b){

            return a+b;  //此处括号内形參能够省略

        };

        NSLog(@"有參数返回值的 加法  %i",addBlock(1,2))  ;

        

        

        //通过block,打印出N条直线。N是调用块时传入

        void(^ lineBlock)(int)=^(int N){

            for (int i=0; i<N; i++) {

                NSLog(@"______________");

            }

        };

        lineBlock(5);

        

        //减法

        int (^ subBlock)(int,int)=^(int a,int b){

            return a-b;

        };

        NSLog(@"减法 %i",subBlock(23,12));

        

        

        //typedef  MyBlock取代int (^ MyBlock)(int,int)

        typedef int (^ MyBlock)(int,int);

        

        //乘法简化 MyBlock是类型,不能直接用来调用block,须要用变量名来调用

        

        MyBlock mulBlock=^(int a,int b){

            return a*b;

        };

        

        NSLog(@"乘积为: %i",mulBlock(1,2));

        

        //除法

        MyBlock divBlock=^(int a,int b){

            return a/b;

        };

        NSLog(@"商为: %i",divBlock(9,3));

        

        

        

        

        

        

        

    }

    

    return 0;

}

 

 

posted @ 2017-08-05 08:11  cxchanpin  阅读(155)  评论(0编辑  收藏  举报