block的内存默认放在栈中,(开发人员不需要管理block内存),block所引用的对象的retainCount不变;
Block_copy(block);对bloc进行了copy操作,block的内存会搬到堆里面,block所引用的对象retainCount+1;
Block_release(block);对block进行了release操作之后,block所引用的对象retainCount不变;
1.默认情况下,block的内存是在栈中,它不会对所引用的对象进行任何操作
-
2.如果对block做一次copy操作,block的内存就会在堆中
- 2.1 它会对所引用对象做一次retain操作,retainCount+1
MRC:使用__block修饰所引用的对象,block就不会做retain操作
ARC:使用__unsafe_unretained或__weak修饰所引用的对象,block就不会做retain操作 - 2.2 使用assign(nonatomic, assign)修饰block,block的内存放在栈中;
- 2.3 一般使用copy(nonatomic, copy)修饰block,block的内存放在堆中。
- 2.1 它会对所引用对象做一次retain操作,retainCount+1
@property (nonatomic, copy) void (^block))();
- (void)dealloc {
Block_release(block);
[super dealloc];
}