1 // 2 // main.m 3 // BlockTest 4 // 5 // Created by LiuChanghong on 15/9/25. 6 // Copyright © 2015年 LiuChanghong. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 11 int main(int argc, const char * argv[]) { 12 @autoreleasepool { 13 14 void(^block1)(void) = ^(void){ 15 NSLog(@"block1——无返回值无参数"); 16 }; 17 18 void(^block2)(int,int) = ^(int x,int y){ 19 NSLog(@"block2——无返回值有参数 %d + %d = %d",x,y,x+y); 20 }; 21 22 int(^block3)(void) = ^(void){ 23 NSLog(@"block3——有返回值无参数"); 24 return 0; 25 }; 26 27 int(^block4)(int,int) = ^(int x,int y){ 28 NSLog(@"block4——有返回值有参数"); 29 return x + y; 30 }; 31 32 block1(); 33 block2(3,8); 34 block3(); 35 block4(4,9); 36 37 } 38 return 0; 39 }
输出结果
block 与变量的关系
- block 与 局部变量的关系
int temp = 100; void (^blockTest)(void) = ^(void){ NSLog(@"%d",temp++);//会报错 NSLog(@"%d",temp+1); };
第一行NSLog会报错,第二行不会报错,因为temp++相当于temp = temp + 1,然而block默认不能修改局部变量的值。
__block int temp = 100; void (^blockTest)(void) = ^(void){ NSLog(@"%d",temp++);//不会报错 NSLog(@"%d",temp+1); };
如果局部变量 temp 在声明时用 __block 进行修饰,blockTest内就能够修改它的值了。
注意:block可以直接修改全局变量。
时间: 2024-10-12 21:30:25