//
//  main.m
//  block基本使用
//
//  Created by Ymmmsick on 15/7/21.
//  Copyright (c) 2015年 Ymmmsick. All rights reserved.
//

#import <Foundation/Foundation.h>
typedef int (^IntBlock)() ;
typedef void (^VoidBlock)();

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"这个哥修改过的模版!");
        
        //没有行参,没有返回值的block
        void (^testBlock)() = ^ {
            NSLog(@"Block---->Test");
            NSLog(@"Block---->Test");
        };
        
        testBlock();
        
        //有行参有返回值的block
        int (^sumBlock)(int,int) = ^(int a,int b){
            return a+b;
        };
        NSLog(@"sum is :%d",sumBlock(10,12));
        
        //typedef
        IntBlock productBlock = ^(int a,int b){
            return a * b;
        };
        NSLog(@"product is :%d",productBlock(10,10));
        
        /*
         Block访问外部变量
         1.block内部可以访问外部的变量
         2.默认情况下,block不能修改外部的变量
         3.外部变量添加__block关键字,block内部就可以修改外部的变量
         */
        
        __block int a = 0;
        VoidBlock areaBlock = ^{
            a = 10;
            NSLog(@"a = %d",a);
        };
        areaBlock();
    }
    return 0;
}