// main.m
// block探索
//
// Created by 殷婷婷 on 15-6-6.
// Copyright (c) 2015年 lanou. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//====================普通变量==============================
//普通的局部变量,block只会拿到它初始的值(block定义那一刻),不能跟踪值的改变
// int a = 10;
//
// a = 20;
// void (^block)() = ^{
// NSLog(@"%d",a);//block会在定义那一刻直接拿到外部局部变量的值,以后都不会改变,这个值相当于是个常量了,所以打印20
// };
//
// a = 100;
//
// block();
//======================被__block修饰的变量======================
__block int a = 10;
a = 20;
void (^block)() = ^{
NSLog(@"%d",a);//block能够一直引用被__block修饰的变量,所以打印100
};
a = 100;
block();
}
//===================被static修饰的变量========================
static int a = 10;
a = 20;
void (^block)() = ^{
NSLog(@"%d",a);//block能够一直引用被static修饰的变量,所以打印100
};
a = 100;
block();
//===================全局变量================================
// int a = 10;这个a定义在函数外
a = 20;
void (^block)() = ^{
NSLog(@"%d",a);//block能够一直引用全局变量,所以打印100
};
a = 100;
block();
}