OC-Block语法

 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可以直接修改全局变量。

posted @ 2015-09-25 20:36  Geeok  阅读(274)  评论(0编辑  收藏  举报