zoukankan      html  css  js  c++  java
  • OC block声明和使用

    #import "Button.h"
    
    typedef int (^MySum) (int, int);
    
    void test() {
        // 定义了一个block,这个block返回值是int类型,接收两个int类型的参数
        int (^Sum) (int, int) = ^(int a, int b) {
            return a + b;
        };
        int a = Sum(10 ,11);
        
        NSLog(@"%i", a);
    }
    
    void test2() {
        // __block有2个下划线
        __block int c = 15;
        
        // 声明了一个block变量
        MySum sum = ^(int a, int b) {
            // 如果外部的变量用了__block关键字,就可以在block内部修改这个变量
            c = 19;
            
            // block可以访问外面定义的变量
            NSLog(@"c is %i", c);
            
            return a + b;
        };
        
        NSLog(@"%i",  sum(10, 10));
    }
    
    
    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            Button *btn = [[[Button alloc] init] autorelease];
            
            btn.block = ^(Button *btn) {
                NSLog(@"按钮-%@被点击了", btn);
            };
            
            // 模拟按钮点击
            [btn click];
        }
        return 0;
    }

    补充:

    #import <Foundation/Foundation.h>
    
    int sum(int a, int b) {
        return a + b;
    }
    
    void test() {
        int (^Sum) (int, int) = ^(int a, int b) {
            return a + b;
        };
        
        // block
        int c = Sum(10, 9);
        NSLog(@"%i", c);
        
        // 函数
        c = sum(10, 10);
        NSLog(@"%i", c);
        
        int (*sump) (int, int) = sum;
        c = (*sump)(9, 9);
        NSLog(@"%i", c);
    }
    
    typedef char * String;
    
    void test1() {
        // 定义了Sum这种Block类型
        typedef int (^Sum) (int, int);
        
        // 定义了sump这种指针类型,这种指针是指向函数的
        typedef int (*Sump) (int, int);
        
        // 定义了一个block变量
        Sum sum1 = ^(int a, int b) {
            return a + b;
        };
        
        int c = sum1(10, 10);
        NSLog(@"%i", c);
        
        // 定义一个指针变量p指向sum函数
        Sump p = sum;
        // c = (*p)(9, 8);
        c = p(9, 8);
        NSLog(@"%i", c);
    }
    
    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            test1();
        }
        return 0;
    }
  • 相关阅读:
    头指针与头结点的异同
    C:Users用户名AppData里面的文件可以删除吗
    mac os x在PC上安装
    迷宫问题
    对称自反传递
    判断
    离散实验模板
    离散实验二
    tp.5.0.21抛出错误
    php复制整个文件夹,此方法可过滤掉.svn文件夹
  • 原文地址:https://www.cnblogs.com/liuwj/p/6899871.html
Copyright © 2011-2022 走看看