block

block是可以截取自动变量的匿名函数,它是iOS中一种特殊的数据类型。
一般应用于
- 动画
- 多线程
- 集合遍历
- 回调(网络请求)

在将block作为参数传递的一个技巧写法

void test(int (^myBlock) (int num1, double num2, char num3))
{
}

这样去定义参数时,看起来很麻烦,但是调用test函数时,会自动帮你生成参数,不需要再手动敲,提高了效率。

用block前判断是否为空

比如这种情况

void test(void(^method)())
{
        method();        //此处报错EXC_BAD_ACCESS
}
int main()
{
        test(nil);
}

如果给block传nil,会报错,出现EXC_BAD_ACCESS,因为你给block传nil,它会乱指一块内存所以最好在使用block前判断是否为空

void test(void(^method)())
{
        if(method != nil)
        method();
}
int main()
{
        test(nil);
}

关于__weak和__strong自己的理解

之前一直不理解这个__strong,用__weak不就是为了解除block对于self的强引用吗,那其实对__weak也不理解,因为weakSelf不也是self吗,你用weakSelf,到时候不也是对self进行了一次强引用了吗。
但是,不是这样的,只考虑有__weak的情况下,他持有self的指针,但是不强引用self,所以block只是对weakSelf进行了强引用,

哎呀,还是不理解,不能把自己说服,先说一下对strong的理解,这个是因为strong的是一个局部变量,block执行之后strong就可以释放掉了,但是他保证了在block执行期间这个self不被释放掉。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值