Main.m
#import <Foundation/Foundation.h>
#import "Person.h"
typedef void(^Myblock)();
int main(int argc, const char * argv[])
{
@autoreleasepool {
//block调用局部基本数据类型对象,进入到block里面,num会变成常量
//如果添加了关键字__block,那么在block里面num就是同一个变量,那么我们就可以修改(我们也可以替换成static关键子)
// __block int num = 10;
static int num = 10;
Myblock block1 = ^{
NSLog(@"%d",++num);
};
num = 20;
block1();
//block 调用局部oc对象,该对象会被retain(注意:block在堆上时才会起retain作用),使用__block修饰符修饰变量就,则不会被retain;
__block NSObject *obj = [[NSObject alloc] init];
NSLog(@"obj retainCount: %lu",[obj retainCount]);
Myblock block2 = ^{
NSLog(@"obj retainCount: %lu",[obj retainCount]);
};
Block_copy(block2);
block2();//block在栈上不会做retain操作,只有当copy到堆内存中才会起作用
/*-------------Person类中block演示-------------*/
Person *ps = [[Person alloc] init];
[ps testFun];
}
return 0;
}
Person.h
typedef void(^Personblock)();
@interface Person : NSObject
@property (nonatomic, copy)Personblock myBlock;
- (void)testFun;
Person.m
- (void)testFun
{
__block NSObject *obj = [[NSObject alloc] init];
NSLog(@"obj retainCount: %lu",[obj retainCount]);
self.myBlock = ^{
NSLog(@"obj retainCount: %lu",[obj retainCount]);
};
self.myBlock();
}