IOS 浅谈Block用法

1.block使用符号“^”表示,例如:

 int (^myBlock)(int  a){

       //块的实现代码

    };


此block块名称为myBlock,参数是int型的a,并返回int变量。


2.可以为常用的块创建typedef

如果定义一个块

typedefint (^myBlock)(int a) ;则系统多了一个myBlock类型.


3.尽量避免在if,else语句中分别定义2个块,如:

 void(^block)();

   if(//)

   {

       block = ^{

    

      NSLog(@"Block A");

   };

       

   }

   else

   {

       block = ^{

           

       NSLog(@"Block B");};

   }


因为编译器有可能把分配给块的内存覆写掉。导致程序崩溃,为解决此问题可以写成


block =[ ^{

    

       NSLog(@"Block A");

} copy];这样栈内存就不会自动回收。


4.块引用对象出现保留环的问题

假设在MyViewController *_myViewCtrl;


定义NSData *_fetchData;

_myViewCtrl = [[MyViewController alloc]init]

[_myViewCtrl startCompletiobHandle:^(NSData *data)

{

   _fetchData = data;

}]; 

上述代码是错误的,块保留了类的实例_myViewCtrl,而对象又保留了块,从而出现保留环。

应该进行如下修改:


MyViewController *_myViewCtrl = [[MyViewController alloc]init];

[_myViewCtrl startCompletiobHandle:^(NSData *data)

{

  _fetchData = data;

}]; 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值