Block见解

block与c函数有两点不同

1没有函数名

2带有^ 插入符号 可以便于查找


格式为:

^ 返回值类型 参数列表 表达式


在函数参数和返回值中使用Block类型变量时可以使用 typedef int (^blk) (int) 


block具有截获自动变量的值 在block申明之前的变量 在block实现中使用了 block会截获该变量的地址 如果该变量在之后改变 block中还是会使用先前的变量值 


变量截获之后就不能发生改变了 但是使用__blcok申明一个变量则是表明该变量可以在block中能够发生改变


在类中申明block时,一般都是在创建在栈上的,属于编译器自己管理 当出了作用域之后就会释放 ,而为了延长block的作用期限 可以对其进行copy操作 ,这样block就会放置到heap堆上,此时需要自己管理block 不会被自动释放  ,copy与retain的区别,都会引用计数增加 但copy会复制到heap堆上  之后都得手动释放

block中的变量默认是不能修改的,因为在编译器中声明为static ,但如果声明变量为__block就会把变量取消static,所以可以改变 

在使用block时要注意循环引用,在非ARC ,如果使用self时声明__block  ARC时声明self为__weak即可解除


在解决block引起的循环引用时,做法是先将self申明为__weak,block截取自动变量,这就不会由于self而持有blcok,而引起循环引用了,之后在block的实现方法里,将self转换为strong,这是为了防止self在使用其他变量时发生崩溃的问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值