zoukankan      html  css  js  c++  java
  • 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;

    }

     

  • 相关阅读:
    JavaScript Web页面内容导出到Word、Excel (转载)
    合并多个声音文件
    龙舟记
    c#获取应用程序目录
    ADO.NET数据库连接池研究(一) 查看连接池数 (转)
    UpdatePanel 内控件 更新“外的”控件【转】
    web客户端播放wav文件
    解决DataList控件无缝滚动图片(转)
    关闭sleeping连接进程在Sql Server2000数据库存储过程中(转)
    win7下没有注册类别 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7288864.html
Copyright © 2011-2022 走看看