使用Block可簡化回調;
Block 形式: 傳回類型(^ Block名)(形式參數){實體;};
Block Pointer指針: 傳回類型(^Block名)(形式參數);
可用typedof申明;
Block按在記憶體中的位置分為 NSGlobalBlock、NSStackBlock、NSMallocBlock;
ARC中将會自動把NSStackBlock複制到NSMallocBlock;
NSMallocBlock隻需要對NSStackBlock進行copy操作就可以擷取,但是retain操作就不行,
小Demo如下:
<span style="font-size:18px;">#import "ViewController.h"
typedef void(^MyBlock)(void);
@interface ViewController()
@property (nonatomic, strong) MyBlock myblock;
@property (nonatomic, assign)int globalData ;
@end
@implementation ViewController
- (void)viewDidLoad {
int i = 0;
static int staticI = 0;
__weak ViewController *viewCon = self;
_myblock = ^(void){
NSLog(@"\ni = %d\n staticI = %d\n globaldata = %d",i,staticI,viewCon.globalData);
};
i++;
staticI++;
_globalData++;
_myblock();
}
-(void)showMessage{
NSLog(@"this is private method showMessage");
}
@end</span>
輸出結果為:
i = 0 staticI = 1 globaldata = 1 |
參考文獻:
Block入門:http://www.jianshu.com/p/17872da184fb
Block記憶體管理:http://www.knowsky.com/883942.html
http://www.cocoachina.com/bbs/read.php?tid=87593&keyword=block
http://www.cocoachina.com/bbs/read.php?tid=88591&keyword=block
http://www.cocoachina.com/bbs/read.php?tid=9222&keyword=block