OC5_Block

//
//  main.m
//  OC5_Block
//
//  Created by zhangxueming on 15/6/26.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import <Foundation/Foundation.h>
//block

//函数指针

int add(int a, int b)// int (*)(int , int)
{
    return a+b;
}

typedef int (* Padd)(int, int);

//block 是OC中的数据类型,用来保存一段代码块
typedef int(^ addBlock) (int, int);// int (^ ) (int , int)

typedef int (^ MyBlock) (int, int);

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Padd func=add;
        NSLog(@"add =%i", func(3,5));
        
        //不带参数的block
//        void (^printBlock)(void)= nil;
//        printBlock = ^(void)
//        {
//            NSLog(@"  *");
//            NSLog(@" ***");
//            NSLog(@"*****");
//        };
//        NSLog(@"%p", printBlock);
//        printBlock();
//        printBlock();
        //省约(void)
        void (^printBlock)(void) = ^{
            NSLog(@"  *");
            NSLog(@" ***");
            NSLog(@"*****");
        };
        printBlock();
        
        //带参数的block
        int (^minusBlock)(int, int)=^(int a, int b)
        {
            return a-b;
        };
        
        NSLog(@"sub = %i", minusBlock(10,3));
        
        //block可以直接读取block外部变量, 但是不能修改, 如果要修改block外部变量的值,需要在变量的前面 加 __block关键字
        
        __block int num=100;
        
        void (^numBlock)(void)=^{
            NSLog(@"num = %i", num);
        };
        
        numBlock();
        
        void (^setNumBlock)(int) = ^(int value)
        {
            num = value;
            NSLog(@"num = %i", num);
        };
        
        setNumBlock(200);
        
        //block 与 typedef
        MyBlock multiBlock = ^(int a, int b)
        {
            return a*b;
        };
        
        NSLog(@"mul = %i", multiBlock(10, 6));
    }
    return 0;
}

 

posted @ 2015-06-26 14:53  sirzhang  阅读(247)  评论(0编辑  收藏  举报
AmazingCounters.com