Block

简介: Button.h: #import @class Button;typedef void (^ButtonBlock) (Button *);@interface Button : NSObject@property(nonatomic,as...

Button.h:

#import <Foundation/Foundation.h>
@class Button;

typedef void (^ButtonBlock) (Button *);

@interface Button : NSObject

@property(nonatomic,assign) ButtonBlock block;

-(void)click;
@end

Button.m:

#import "Button.h"

@implementation Button
-(void)click{
    _block(self);
}
@end

main:

#import <Foundation/Foundation.h>
#import "Button.h"

typedef int (^MySum) (int,int);

//定义一个block方法,block相当于一个函数方法,也由参数和返回值
void test(){
    //定义一个Block,^是block的标志
    //这个block返回类型是int类型,接受两个int类型的参数
    int(^Sum)(int,int)=^(int a,int b){
        return a+b;
    };

    //调用block方法
    int a=Sum(10,11);
    NSLog(@"%i",a);
}

void test2(){
    int c=15;
    //如果外面的变量已经用__block进行了修饰,就可以在block进行修改
    __block int d=16;
    //由于宏定义,这里MySum是一个block类型,sum是一个变量名
    MySum sum=^(int a,int b){
        //block可以访问外面定义的变量
        NSLog(@"我是外部变量C=%i",c);
        //如果不加__block修饰,默认是不好修改外面的变量的
        d=17;
        NSLog(@"我是外部变量d的修改值=%i",d);
        return a+b;
    };
    NSLog(@"%i",sum(10,10));
}

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

    @autoreleasepool {
        
        Button *btn=[[[Button alloc] init] autorelease];
        test();
        test2();
        btn.block=^(Button *btn){
            NSLog(@"按钮%@被点击了",btn);
        };
        [btn click];
    }
    return 0;
}
结果:

2013-08-02 15:50:25.568 Block[1355:303] 21

2013-08-02 15:50:25.577 Block[1355:303] 我是外部变量C=15

2013-08-02 15:50:25.578 Block[1355:303] 我是外部变量d的修改值=17

2013-08-02 15:50:25.578 Block[1355:303] 20

2013-08-02 15:50:25.579 Block[1355:303] 按钮<Button: 0x100109950>被点击了


相关文章
|
8月前
|
人工智能 程序员 测试技术
亲测可用,IDEA 中使用满血版 DeepSeek R1!支持深度思考!免费!免配置!
之前介绍过在IDEA中使用DeepSeek的方案,但是很多人表示还是用的不够爽,比如用CodeChat的方案,只支持V3版本,不支持带推理的R1。想要配置R1的话有特别的麻烦。那么,今天,给大家带来一个亲测有效,可使用DeepSeek R1,同时支持问答+AI程序员,无需配置,快速使用的方案。那就是借助阿里的通义灵码,通义灵码最近刚刚做了重大更新,新上线了模型选择功能。在支持Qwen的模型之外,还同时支持了DeepSeek-V3 和 DeepSeek-R1 ,而且是满血版671B模型。
|
人工智能 自然语言处理
业界首家!阿里云智能媒体服务,卓越级通过中国信通院大模型媒体处理评估
阿里云智能媒体服务作为业界首家获得中国信通院“卓越级”通过。
业界首家!阿里云智能媒体服务,卓越级通过中国信通院大模型媒体处理评估
|
Kubernetes 容器 Perl
Kubernetes网络插件体系及flannel基础
文章主要介绍了Kubernetes网络插件体系,特别是flannel网络模型的工作原理、配置和测试方法。
314 3
Kubernetes网络插件体系及flannel基础
|
SQL DataWorks 数据处理
DataWorks操作报错合集之在创建ES的数据源时,测试连通性提示无法连通,出现报错,如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
网络协议 网络安全 虚拟化
在 Hyper-V 虚拟机中更新组策略时出现 RPC 服务不可用的错误
在 Hyper-V 虚拟机中更新组策略时出现 RPC 服务不可用的错误
398 3
|
Docker Python 容器
解决docker 2022-11-16 14:54:26 python: can‘t open file ‘/src/main.py‘: [Errno 2]
解决docker 2022-11-16 14:54:26 python: can‘t open file ‘/src/main.py‘: [Errno 2]
339 0
|
运维 Cloud Native 机器人
云拨测助力节卡机器人 全面优化海外网站性能
【案例分享·云拨测】借助云拨测,节卡机器人有效挖掘性能瓶颈,经过优化,提升网站打开速度 50% 以上,提高了运营推广活动的 ROI,帮助节卡为全球用户提供更加优质的服务!
云拨测助力节卡机器人 全面优化海外网站性能
|
设计模式 Java iOS开发
寂然解读设计模式 - 适配器模式
适配器模式:将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容 Adapter 适配器设计模式中有 3 个重要角色: 被适配者 Adaptee,适配器 Adapter 和目标对象 Target 从用户的角度看不到被适配者,是解耦的 用户调用适配器转化出来的目标对象方法,适配器再调用被适配者的相关接口方法 用户收到反馈结果,感觉只是和目标对象交互 ,类图如下所示
330 0
寂然解读设计模式 - 适配器模式
|
SQL 分布式计算 DataWorks
|
算法 Java Python
Python的垃圾回收机制(引用计数+标记清除+分代回收)
Python的垃圾回收机制(引用计数+标记清除+分代回收)一、写在前面:我们都知道Python一种面向对象的脚本语言,对象是Python中非常重要的一个概念。在Python中数字是对象,字符串是对象,任何事物都是对象,而它们的核心就是一个结构体--PyObject。
1996 0