• 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;

    }

     

  • 相关阅读:
    【nodejs】使用Node.js实现REST Client调用REST API
    [Groovy] Groovy && JNI
    一些很实用的Maven Plugins
    秋天到了
    今天头好疼
    想起那个人的时候
    不知道标题
    生活让我懂得
    显示实现接口和实现接口
    Foreach原理
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7288864.html
Copyright © 2020-2023  润新知