#import <Foundation/Foundation.h>
typedef void(^blockType)();
//1)代码在ARC中
// 运行结果 VVVV i = 5,
//2) 代码在MRC中
// 运行结果 VVVV i = 5,但是用analyze分析,return bb;有内存泄露。MRC下bb是栈block,bb在方法执行完成之后会被销毁掉
// 定义返回值是block类型的函数
blockType test() {
int i = 5;
blockType bb = ^{
NSLog(@"VVVV i = %d",i);
};
//return bb;
return Block_copy(bb); // copy拷贝一份block,bb位于堆区。
}
int main(int argc, const char * argv[]) {
//接收test的返回值
blockType b1 = test();
b1();
Block_release(b1);
}
return 0;
}
来源:oschina
链接:https://my.oschina.net/u/2418942/blog/625790