1. block訪問外部變量
/**
* block內(nèi)部訪問外部值的問題
* block內(nèi)部不允許修改外部變量值
*/
void test(){
int m = 10;
NSLog(@"1:m = %d",m); //10
NSLog(@"2:m addr = %p",&m); //棧區(qū)
// NSString *str = @"abc";
// NSLog(@"str = %p",str);
//定義變量,并且賦值
//當(dāng)定義block的時(shí)候,block會(huì)把外部變量以const的方式復(fù)制一份
//存放到block的所在的內(nèi)存中
void (^myBlock)()=^{
//m的值不能被修改
//m = 100;
NSLog(@"5:m addr = %p",&m); //堆區(qū)
//可以訪問m的值
NSLog(@"3:in block m = %d",m); // ?
};
NSLog(@"4:m addr = %p",&m); //棧區(qū)
//使用
myBlock();
// 1 2 4 5 3
}
-(void)test2(){
__block int m = 10;
NSLog(@"1:m add = %p",&m); //棧區(qū)地址
//__block 不再以const的方式拷貝
void (^myBlock)()=^{
//m的值不能被修改
m = 100;
// n = 10;
// int m = 100;
NSLog(@"5:m addr = %p",&m); //堆區(qū)
//可以訪問m的值
NSLog(@"3:in block m = %d",m); // ?
};
myBlock();
NSLog(@"6:m = %d",m); // ?
NSLog(@"7:m addr = %p",&m);
}
inlineBlock
快捷鍵
- 善于抽取工具類方法
代碼放在它應(yīng)該存在的地方