IOS开发之Block的使用和内存管理

来源:互联网 发布:淘宝图片搬家怎么用 编辑:程序博客网 时间:2024/04/29 10:30

使用Block可简化回调;

Block 形式: 返回类型(^ Block)(形式参数){实体;};

Block Pointer指针: 返回类型(^Block)(形式参数);

可用typedof申明;

Block按在内存中的位置分为 NSGlobalBlockNSStackBlockNSMallocBlock

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


0 0
原创粉丝点击