1.block不能修改局部变量的值,要想修改,必须在局部变量前加一个__block
1.1 __block对象在block中可以被修改,可以 重新赋值;
1.2 block内部和外部同名的变量不是同一个地址的变量,地址发生了改变;
---------------------------------------------------------------------------------------------------------
__block int a = 10;
NSInteger b = 30;
NSLog(@"1----a = block外的地址:%p",&a);
NSLog(@"2----b = block外的地址:%p",&b);
void(^blo1)() = ^{
a = 20;
NSLog(@"5----a = %d",a);
NSLog(@"6----a = block内的地址:%p",&a);
NSLog(@"7----b = block内的地址:%p",&b);
NSLog(@"8----b = %ld",b);
};
NSLog(@"3----a = block外的地址:%p --%d",&a,a);
NSLog(@"4----b = block外的地址:%p --%ld",&b,(long)b);
blo1();
NSLog(@"9----a = block外的地址:%p --%d",&a,a);
NSLog(@"10----b = block外的地址:%p --%ld",&b,(long)b);
//有参数,无返回值;
void(^blo2)(int num1,int num2) = ^(int num1,int num2){
NSLog(@"%d",num1 +num2);
NSLog(@"11-----%d",a);
NSLog(@"12-----%ld",b);
NSLog(@"13------a = block外的地址:%p",&a);
NSLog(@"14------b = block外的地址:%p",&b);
};
blo2(10,20);
NSLog(@"15------a = block外的地址:%p",&a);
NSLog(@"16------b = block外的地址:%p",&b);
---------------------------------------------------------------------------------------------------------
2016-05-31 18:52:22.043 --block[5906:837000] 1----a = block外的地址:0x7fff5fbff7a8
2016-05-31 18:52:22.044 --block[5906:837000] 2----b = block外的地址:0x7fff5fbff788
2016-05-31 18:52:22.044 --block[5906:837000] 3----a = block外的地址:0x1005004d8 --10
2016-05-31 18:52:22.044 --block[5906:837000] 4----b = block外的地址:0x7fff5fbff788 --30
2016-05-31 18:52:22.044 --block[5906:837000] 5----a = 20
2016-05-31 18:52:22.045 --block[5906:837000] 6----a = block内的地址:0x1005004d8
2016-05-31 18:52:22.045 --block[5906:837000] 7----b = block内的地址:0x100500028
2016-05-31 18:52:22.045 --block[5906:837000] 8----b = 30
2016-05-31 18:52:22.045 --block[5906:837000] 9----a = block外的地址:0x1005004d8 --20
2016-05-31 18:52:22.045 --block[5906:837000] 10----b = block外的地址:0x7fff5fbff788 --30
2016-05-31 18:52:22.045 --block[5906:837000] 30
2016-05-31 18:52:22.045 总结--block[5906:837000] 11-----20
2016-05-31 18:52:22.045 总结--block[5906:837000] 12-----30
2016-05-31 18:52:22.046 总结--block[5906:837000] 13------a = block外的地址:0x1005004d8
2016-05-31 18:52:22.046 总结--block[5906:837000] 14------b = block外的地址:0x100700028
2016-05-31 18:52:22.046 总结--block[5906:837000] 15------a = block外的地址:0x1005004d8
2016-05-31 18:52:22.046 总结--block[5906:837000] 16------b = block外的地址:0x7fff5fbff788
2016-05-31 18:52:22.046 总结--block[5906:837000] blo3内部返回的值 = 35
2016-05-31 18:52:22.047 总结--block[5906:837000] 70
Program ended with exit code: 0