从上些章节block-变量的捕获(caputer)中,详细说了基本类型的auto变量的捕获,现在来了解下,对象类型的auto变量是怎样捕获和底层结构是如何的。
block自动copy的情况
在ARC环境下,编译器会根据情况自动将栈上的block复制到堆上,比如以下情况
- block
作为函数返回值时
- block
赋值给__strong
指针时
- block
作为Cocoa API
中方法名含有usingBlock
的方法参数时
- block
作为GCD API
的方法参数时
#import <Foundation/Foundation.h>
#import "RMPerson.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
RMPerson *person = [[RMPerson alloc] init];
person.age = 20;
void (^block)(void) = ^ {
NSLog(@"age is %d",person.age);
};
[person release];
NSLog(@"-----------");
}
return 0;
}
----------------- RM