1. block访问外部变量
/**
* block内部访问外部值的问题
* block内部不允许修改外部变量值
*/
void test(){
int m = 10;
NSLog(@"1:m = %d",m); //10
NSLog(@"2:m addr = %p",&m); //栈区
// NSString *str = @"abc";
// NSLog(@"str = %p",str);
//定义变量,并且赋值
//当定义block的时候,block会把外部变量以const的方式复制一份
//存放到block的所在的内存中
void (^myBlock)()=^{
//m的值不能被修改
//m = 100;
NSLog(@"5:m addr = %p",&m); //堆区
//可以访问m的值
NSLog(@"3:in block m = %d",m); // ?
};
NSLog(@"4:m addr = %p",&m); //栈区
//使用
myBlock();
// 1 2 4 5 3
}
-(void)test2(){
__block int m = 10;
NSLog(@"1:m add = %p",&m); //栈区地址
//__block 不再以const的方式拷贝
void (^myBlock)()=^{
//m的值不能被修改
m = 100;
// n = 10;
// int m = 100;
NSLog(@"5:m addr = %p",&m); //堆区
//可以访问m的值
NSLog(@"3:in block m = %d",m); // ?
};
myBlock();
NSLog(@"6:m = %d",m); // ?
NSLog(@"7:m addr = %p",&m);
}
inlineBlock
快捷键
- 善于抽取工具类方法
代码放在它应该存在的地方