block的简单实现和讲解:

本文介绍了Block的基本概念及其在Objective-C中的应用,包括定义、作为函数参数及返回值、访问外部变量的方法,同时还演示了如何利用Block实现按钮点击事件的监听。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.block封装了一段代码,可以在任何时候执行。

2.block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值,它和传统的函数指针很类似,但是有区别,block是inline(内联函数)的,并且默认情况下它对局部变量是只读的

3.block很好用并且性能很高,苹果官方建议尽量多的使用block,在多线程,异步任务,集合遍历,集合排序,动画转场用的很多。

 

 

4.block:   int^sum) (int ,int);     1。返回值类型   2block名字      3.参数:

 

 

        //定义了一block,这个block返回值是int类型,接收两个int类型的参数。

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

           return a+b;

       };

       

       int demo = sum(20,49);

       NSLog(@"%d",demo);

 

也可以用typedef将block定义为一种数据类型:这样就比较灵活了

 

typedefint (^Sum) (int ,int );

 

 //此时的sumSum的对象。

      Sum sum = ^(int a,int b){

          returna+b;

       };

       

      int count = sum(2,3);

      NSLog(@"%d",count);

 

 

 

5.注意:block可以访问外面定义的局部变量。但是不能修改

 

如果你想要在block修改外面定义的局部变量,那么就对变量进行声明__block (两个下划线);

 

 

 __blockint num =10;

       

       

       //此时的sumSum的对象。

      Sum sum = ^(int a,int b){

          returna+b;

           num=11;

       };

       

      int count = sum(2,3);

      NSLog(@"%d",count);

 

 

6.block作为监听器使用:(模拟按钮被点击事件);

 

1.定义一个button类:

2.定义一个block

3.block的具体实现

4.调用block

 

 

.h文件代码为:

 

#import<Foundation/Foundation.h>

@classButton;

//定义block

typedefvoid(^ButtonBlock)(Button *);

@interface Button :NSObject

 

//block声明settergetter方法:

@property (nonatomic,copy)ButtonBlock block;

 

-(void)onclick;

 

@end

 

 

block的具体实现代码:

 

btn.block=^(Button*btn)

       {

           NSLog(@"%@点击了我 ",btn);

       };

 

.m文件:

 

#import"Button.h"

 

@implementation Button

 

-(void)onclick{

   _block(self);

}

@end

 

 

在main函数中:

Button *btn = [[[Buttonalloc]init]autorelease];

       btn.block=^(Button *btn)

       {

           NSLog(@"%@点击了我 ",btn);

       };

       

       //模拟按钮被点击了

       [btnonclick];

 

 

注意:这个代码,先在main函数中实现了block的具体实现,然后再用button类中进行调用,这是属于回调机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值