Block及其使用

Block及其使用

FunctionPoint函数指针

什么是函数指针?

    函数指针顾名思义就是指向函数的指针,之前学过的指向整型变量的指针就是整型指针、指向结构体变量的指针就是结构体指针。依次类推,函数指针得其义。

函数指针在C语言中分量

    函数内容在C语言中分量很重,函数的调用直接意义上大大简化了我们程序员的代码量,而且给简化了我们的思维量。函数指针指向的就是函数,一个指针可以调用函数,比函数的调用更加简化,因此分量超过函数。

函数指针的定义与表示?

-(int)sum(int x,int y)函数

-(int)sum(int x,int y)

{

return x+y;

}

-(int)(*p)(int x,int y)函数指针

表示:我是一个拥有两个整型参数,一个整型返回值的函数指针。

指针类型:-(int)(*)(int x,int y)

指针变量名:p

 

函数指针的调用?

 

Block

什么是BLOCK(block在OC中的分量)?

Block就是把一个OC中的函数打包成一个闭包,然后用指针来指向这个闭包,从而达到调用这个闭包内容的目的。Block的这个功能跟函数指针十分类似。

Block的定义与表示?

定义一个block

void (^sum)(int ,int)=^(int x,int y)

{

NSLog(@”%d”,x+y);

}

Blockde 调用?

sum(2,3);

上题中就是一个block闭包,其实block就是一个指针,只不过这个指针指向的是一个特定参数和特定返回值的函数,调用这个Block就是直接将形参导入。

另外block指针可以指向另外一个block

void (^sum)(int ,int )=^(int x,int y)

{

NSLog(@”%d”,x-y);

};

sum(3,4);

这就是block指针的重指向,对于sum块来说,变量类型还是void(^)(int ,int),变量名还是sum,唯一变的就是这个块里面的实现。

对于这种情况,我们可以将变量类型进行重新定义表示

typedef void(^newSum)(int, int);

newSumsum1=^(int  x,int y){

NSLog(@”%d”,x*y);

};

几种常见的Block情况?

无返回值无参数

void (^block)( )=^{ sentences;};

block();

无返回值有参数

void  (^block)(int )=^(int x){sentences;};

block (x);

有返回值无参数

int(^block)()=^int (){sentences;};

int a=block();

有返回值有参数

int(^block)(int)=^int (int x){sentences;};

int a=block(x);

 

Main函数中的block使用

 

.m文件中的block使用

后续会联系实际项目内容个进行讲解。

Block中局部变量和全局变量?

局部变量会以const变量被拷贝并存储到block中,也就是说block对其是只读的。如果尝试在block内部给make变量赋值,会抛出编译器错误。

const拷贝的方式访问非局部变量,意味着block实际上并不是真正的访问了非局部变量——只不过在block中创建了非局部变量的一个快照。当定义block时,无论非局部变量的值是什么,都将被冻结,并且block会一直使用这个值,即使在之后的代码中修改了非局部变量的值。

Block访问外部变量
1)Block内部可以访问外部变量;
2)默认情况下,Block内部不能修改外部的局部变量
3)给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改。就相当于是全局变量。

总结

   block继承了函数指针的便捷性, 也扩展了便捷性。有了block,使得我们在代码块中更加实用,跟OC中的方法直接完美挂钩。

转载高手观点:
iOS开发中我们在很多地方都能见到block的身影,:

      (1)遍历数组或者字典

      (2)视图动画

      (3)排序

   (4)通知

 (5)错误处
    (6)
多线程
    (7)
封装变化点 .......
    
因此,我们了解到BlockOC中的一种数据类型,在iOS开发中被广泛使用,^Block的特有标记,Block的实现代码包含在{}之间.大多情况下,以内联inline函数的方式被定义和使用,BlockC语言的函数指针有些相似,但使用起来更加灵活, 一个简单的加法,使得block的定义一目了然:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值