使用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